powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
25 сообщений из 26, страница 1 из 2
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38949332
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой текст (SQL-запрос):
Код: plaintext
1.
2.
insert into BM_ACTION_LOG (MOMENT, ACTION_ID, STAFF_ID, SCRIPT_NAME, DOMAIN_ID, GROUP_ID, CUSTOMER_ID, TARGET_ID, NEW_VALUE, STAFF_COMMENT)
values (now(), 101, :sysuser, 'smsmgr.pl:sms_smart.pl', :domain, :cgroup, :customer, :customer, :customer, 'new customer is created via SMS-gate')

Нужно найти все placeholder (имена переменных, начинающиеся с символа двоеточия).
Но при этом в результаты не должны попадать выражения в кавычках.
Видимо мне нужны backreferences, но я не умею ими пользоваться.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38949384
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

[,\s]:\w+

только, как всегда, у меня ощущение, что решается не та задача, да еще не с той стороны.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38949524
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть.
Мне нужно последовательно выполнить несколько SQL-запросов.
Большинство SQL-запросов являются параметрическими, некоторые из них возвращают значения в параметры, которые используются в последующих запросах.
Поэтому все параметры я храню в общем хеше, из которого использую (bind_param_inout) те параметры, которые применяются в конкретном запросе.
А чтобы список этих параметров не составлять вручную, я их извлекаю прямо из текста запроса.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38949528
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u[,\s]:\w+
У меня текст может быть и таким: 'argument is :amount'.
В данном случае это текст, а не параметр :amount, подстановка производиться не должна.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38950041
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

,\s*(:\w+)
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955204
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Полноценный лексический анализ и вперед... YACC тебе в помощь. Регулярками вот это
Alibek B.У меня текст может быть и таким: 'argument is :amount'.
В данном случае это текст, а не параметр :amount, подстановка производиться не должна.не достается. Или достается но полным анализом. Регулярка будет километровая.

Вы, как всегда, решаете не ту задачу. Вернее нас заставляете... Почему вы хотите этого странного?..
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955282
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача простая - из текста SQL-запроса извлечь именованные параметры, чтобы впоследствии привязать к ним переменные.
Я регулярные выражения знаю не очень хорошо и первоначально подумал, что обратные ссылки помогут мне в какой-то степени эмулировать состояния автомата.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955445
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Задача простая - из текста SQL-запроса извлечь именованные параметры, чтобы впоследствии привязать к ним переменные.
задача странная. если есть готовый запрос с параметрами, значит его уже ктото создал и на тот момент параметры были известны. почему ВДРУГ нужно достать эти параметры много позже?
задача изначально какая? явно же не та что описана?
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955518
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, что тут может быть странного.
Есть класс-обертка для работы с БД. Реализует ряд методов, в том числе выполнение SQL-запроса с параметрами и возвратом результата. Этот класс-обертка не знает заранее, какой SQL-запрос ему будет передан и с какими параметрами.
Есть скрипт, который использует класс-обертку для работы с БД. Этот скрипт конечно знает, какие SQL-запросы и с какими параметрами он выполняет. Но как раз в том и смысл, чтобы не перечислять список параметров, а использовать параметры из текста SQL-запроса.
Выглядит использование как-то так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
my $dbwrap = new ...;
my $sql1 = "insert into table1 (type, cmd) values (:type, :cmd) return user_id into :user_id";
my $sql2 = "insert into table2 (user_id, field_id) select :user_id, field_id from ref_fields";
my $sql3 = "update table3 set value = value + :amount, last_type = :type where reg_id = :registry return value into :amount";
...
my $params = {}; #$params это "куча" со параметрами для параметрических in и out запросов
$params->{'type'} = 'type1';
$params->{'cmd'} = 'cmd1';
$dbwrap->query($sql1, $params); #$params передается по ссылке, в хеш будет добавлен результат :user_id
$dbwrap->query($sql2, $params); #в запросе будет использована переменная user_id, полученная ранее
$params->{'amount'} = 100;
$params->{'registry'} = 1;
$dbwrap->query($sql3, $params); #в запросе будет использована ранее установленная переменная type и только что установленные параметры amount и type


В метод query я передаю только сам SQL-запрос и общий хеш с переменными, из которых будут использоваться только те, что указаны в SQL-запросе. Если третьим параметром в него передавать список параметров, то во-первых это будет ручная работа там, где она автоматизируется, а во-вторых возможны ошибки и опечатки.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955552
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Но как раз в том и смысл, чтобы не перечислять список параметров, а использовать параметры из текста SQL-запроса.
они все равно же лежат в хеше, и там перечислены. мартышкин труд.

Alibek B.В метод query я передаю только сам SQL-запрос и общий хеш с переменными, из которых будут использоваться только те, что указаны в SQL-запросе.
бред. очередная универсальная обертка, которая сломается на чуть более нестандартном запросе. это мы проходили.))
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955629
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uони все равно же лежат в хеше, и там перечислены. мартышкин труд.
В хеше перечислены вообще все параметры.
А в конкретном запросе используются только некоторые из них.

r uочередная универсальная обертка, которая сломается на чуть более нестандартном запросе. это мы проходили.))
Чему там ломаться? Это же не обертка, которая делает все. Это автоматизация некоторых типовых сценариев.
Сейчас у меня это выглядит так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
	my $q = $dbh->prepare($sql);
	if ($store && ref($store) eq 'HASH')
	{
		$params = [];
		while ($sql =~ m/:(\w+)/gm)
		{
			push @$params, $1;
		}
		foreach my $fld (@$params)
		{
			$store->{$fld} = undef unless (exists($store->{$fld}));
			$q->bind_param_inout(":$fld" => \$store->{$fld}, 100);
		}
	}
...
	my $ret = $q->execute();
...


Ну а проблему с тем, чтобы не находить placeholder в кавычках пока никак не решил, переписал запрос так, чтобы они в кавычках не оказывались.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955890
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.В хеше перечислены вообще все параметры.
а должны быть не все, а только нужные.
сами себе проблему создаем - сами её потом героически "через гланды" решаем)
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38955927
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кризиз среднего возраста, что-ли?
Я прекрасно знаю, что для bind_param нужно перечислять только нужные параметры. И про это я писал в своем втором сообщении (третьем в топике).
Но мне нужно выполнить не один запрос, а серию запросов, при этом одни запросы возвращают out-параметры, которые используются как in-параметры в других запросах.
В этом случае удобнее использовать общий хеш с параметрами, в котором после выполнения всей серии запросов будут собраны результаты выполнения всех запросов.
По большому счету я это сделал и это действительно удобнее, чем запускать SQL-запрос, передавая в него конкретный список параметров. Сложность только в том, чтобы при поиске placeholder с помощью регулярных выражений исключить результаты, найденные в кавычках. Решить это я пока не смог, написал SQL-запросы таким образом, чтобы подобных случаев не возникало.
Если подобное с помощью регулярных выражений не решить, значит так и оставлю.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38956001
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.В этом случае удобнее использовать общий хеш с параметрами,
а что мешает сделать несколько хешей, для разных запросов? или даже в общем хеше но с префиксами например... да много можно придумать адекватных решений, но нет, лучше конечно свалить все в кучу, а потом сидеть и ковыряться в ней, вылавливая то что нужно)
No comments.. как говорится
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38956068
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне здесь давали много ценных советов, поэтому попробую еще раз.
Вот практическая реализация моей задачи разными способами.

r uа что мешает сделать несколько хешей, для разных запросов?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
#$bm - класс-обертка для работы с БД
my %argSystem = ('sysuser'=>1, 'domain'=>1, 'group'=>1);
my %argPrepare = ('id'=>undef, 'login'=>undef, 'password'=>undef, 'clock'=>undef, 'begin'=>undef, 'expire'=>undef);
$bm->query($sqlPrepare, \%argPrepare);
my %argCustomer = ('domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>undef);
$bm->query($sqlCustomer, \%argCustomer);
my %argCustomerLink = ('customer'=>$argCustomer{'customer'}, 'id'=>$argPrepare{'id'});
$bm->query($sqlCustomerLink, \%argCustomerLink);
my %argCustomerData = ('customer'=>$argCustomer{'customer', 'login'=>$argPrepare{'login'}, 'phone'=>$argPrepare{'phone'});
$bm->query($sqlCustomerData, \%argCustomerData);
my %argCustomerLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'new customer is created via SMS-gate');
$bm->query($sqlCustomerLog, \%argCustomerLog);
my %argAccount = ('domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'credit'=>1000, 'account'=>undef);
$bm->query($sqlAccount, \%argAccount);
my %argAccountLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'new account is created via SMS-gate');
$bm->query($sqlAccountLog, \%argAccountLog);
my %argAccountBalance = ('domain'=>$argSystem{'domain'}, 'account'=>$argAccount{'account'});
$bm->query($sqlAccountBalance, \%argAccountBalance);
my %argAccountCredit = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'account'=>$argAccount{'account'}, 'credit'=>$argAccount{'credit'}, 'start'=>$argPrepare{'clock'}, 'expire'=>$argPrepare{'expire'}, 'credit_id'=>undef);
$bm->query($sqlAccountCredit, \%argAccountCredit);
my %argAccountCreditLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'credit'=>$argAccount{'credit_id'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'new promised payment is created via SMS-gate');
$bm->query($sqlAccountCreditLog, \%argAccountCreditLog);
my %argAccountStatus = ('account'=>$argAccount{'account'});
$bm->query($sqlAccountStatus, \%argAccountStatus);
ny %argService = ('type'=>1, 'tariff'=>1, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'login'=>$argPrepare{'login'}, 'password'=>$argPrepare{'password'}, 'status'=>1, 'service'=>undef);
$bm->query($sqlService, \%argService);
my %argServiceLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'service'=>$argService{'service'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'new service is created via SMS-gate');
$bm->query($sqlServiceLog, \%argServiceLog);
my %argServiceStatus = ('service'=>$argService{'service'}, 'status'=>$argService{'status'});
$bm->query($sqlServiceStatus, \%argServiceStatus);
$bm->query($sqlServiceActualStatus, \%argServiceStatus);
my %argServiceTariff = ('service'=>$argService{'service'}, 'tariff'=>$argService{'tariff'}, 'stariff'=>undef);
$bm->query($sqlServiceTariff, \%argServiceTariff);
my %argCharges = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'service'=>$argService{'service'}, 'amount'=>100, 'cid'=>undef);
$bm->query($sqlCharges, \%argCharges);
my %argChargesBill = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'service'=>$argService{'service'}, 'amount'=>100, 'cid'=>$argCharges{'cid'});
$bm->query($sqlChargesBill, \%argChargesBill);
my %argChargesLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'service'=>$argService{'service'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'add service creation fee');
$bm->query($sqlChargesLog, \%argChargesLog);
my %argFee = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'service'=>$argService{'service'}, 'amount'=>200, 'fid'=>undef);
$bm->query($sqlFee, \%argFee);
my %argFeeBill = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'service'=>$argService{'service'}, 'amount'=>200, 'stariff'=>$argServiceTariff{'stariff'}, 'fid'=>$argFee{'fid'});
$bm->query($sqlFeeBill, \%argFeeBill);
my %argFeeLog = ('sysuser'=>$argSystem{'sysuser'}, 'domain'=>$argSystem{'domain'}, 'group'=>$argSystem{'group'}, 'customer'=>$argCustomer{'customer'}, 'account'=>$argAccount{'account'}, 'service'=>$argService{'service'}, 'source'=>'smsmgr.pl:sms_smart.pl', 'message'=>'add service fee');
$bm->query($sqlFeeLog, \%argFeeLog);
$bm->query($sqlAccountStatus, \%argAccountStatus);
$bm->commit();



r uили даже в общем хеше но с префиксами например...
По сути ничем от предыдущего варианта отличаться не будет.
Читабельность будет даже хуже.

Alibek B.В этом случае удобнее использовать общий хеш с параметрами
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#$bm - класс-обертка для работы с БД
my %argCommon = ('sysuser'=>1, 'domain'=>1, 'group'=>1, 'type'=>1, 'tariff'=>1, 'credit'=>1000, 'charge'=>100, 'fee'=>200);
$bm->query($sqlPrepare, \%argCommon);
$bm->query($sqlCustomer, \%argCommon);
$bm->query($sqlCustomerLink, \%argCommon);
$bm->query($sqlCustomerData, \%argCommon);
$bm->query($sqlCustomerLog, \%argCommon);
$bm->query($sqlAccount, \%argCommon);
$bm->query($sqlAccountLog, \%argCommon);
$bm->query($sqlAccountBalance, \%argCommon);
$bm->query($sqlAccountCredit, \%argCommon);
$bm->query($sqlAccountCreditLog, \%argCommon);
$bm->query($sqlAccountStatus, \%argCommon);
$bm->query($sqlService, \%argCommon);
$bm->query($sqlServiceLog, \%argCommon);
$bm->query($sqlServiceStatus, \%argCommon);
$bm->query($sqlServiceActualStatus, \%argCommon);
$bm->query($sqlServiceTariff, \%argCommon);
$bm->query($sqlCharges, \%argCommon);
$bm->query($sqlChargesBill, \%argCommon);
$bm->query($sqlChargesLog, \%argCommon);
$bm->query($sqlFee, \%argCommon);
$bm->query($sqlFeeBill, \%argCommon);
$bm->query($sqlFeeLog, \%argCommon);
$bm->query($sqlAccountStatus, \%argCommon);
$bm->commit();



Неужели не видно разницы?
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38957469
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

так храни параметры вообще в глобальных переменных. тогда и хеш передавать в функцию не нужно будет)
код станет еще краше и компактнее.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38957717
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем доводить до абсурда?
В моем случае SQL-запросы связаны между собой в одну логическую серию. Эта серия запросов объединена общими параметрами, поэтому логично эти параметры хранить в одном общем хеше.
Если бы прозвучал совет не колхозить, а преобразовать эту серию запросов в одну хранимую процедуру — я бы с разумностью этого совета согласился, но его бы не принял, поскольку у меня есть причины не вносить изменений в структуру БД.
Но сентенция « а должны быть не все, а только нужные », после того как я описал, почему я пришел к общему хешу параметров — это не совет, а бессмысленное морализаторство.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38957781
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Есть такой текст (SQL-запрос):
Код: plaintext
1.
2.
insert into BM_ACTION_LOG (MOMENT, ACTION_ID, STAFF_ID, SCRIPT_NAME, DOMAIN_ID, GROUP_ID, CUSTOMER_ID, TARGET_ID, NEW_VALUE, STAFF_COMMENT)
values (now(), 101, :sysuser, 'smsmgr.pl:sms_smart.pl', :domain, :cgroup, :customer, :customer, :customer, 'new customer is created via SMS-gate')

Нужно найти все placeholder (имена переменных, начинающиеся с символа двоеточия).
Но при этом в результаты не должны попадать выражения в кавычках.
Видимо мне нужны backreferences, но я не умею ими пользоваться.

решается рекурсией, но что-то у меня не пошло, поэтому так:

Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$sql = <<SQL;

insert
into BM_ACTION_LOG (MOMENT, ACTION_ID, STAFF_ID, SCRIPT_NAME, DOMAIN_ID, GROUP_ID, CUSTOMER_ID, TARGET_ID, NEW_VALUE, STAFF_COMMENT)
values
(now(), 101, :sysuser, 'smsmgr.pl:sms_smart.pl', :domain, :cgroup, :customer, :customer, :customer, 'new customer is created via SMS-gate')

SQL

$sql =~ /(?: ((?>:\w+))(?{$param{$1}++ unless $j % 2}) | ['](?{++$j}) ) (*FAIL)/x;

use Data::Dumper;
warn Dumper \%param;
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38966924
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже вот так, более продвинуто

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
say for <<SQL =~ / ['][^']+['] (*SKIP)(*F) | :\w+ /gx;  

insert into
BM_ACTION_LOG (MOMENT, ACTION_ID, STAFF_ID, SCRIPT_NAME, DOMAIN_ID, GROUP_ID)
values
(now(), 101, :sysuser, 'smsmgr.pl:sms_smart.pl', :domain, :cgroup, :customer, :customer,:customer, 'new customer is created :via SMS-gate')

SQL




Вывод:
:sysuser
:domain
:cgroup
:customer
:customer
:customer
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38966925
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу просвещённую публику обратить своё внимание,
что в вышеприведённом регулярном выражении нет захватывающих круглых скобок,
а захват есть.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38967099
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, классно.
Но я это регулярное выражение едва понимаю.
А когда через полгода нужно будет что-то дорабатывать, это для меня вообще черная магия будет.
Лучше предыдущий вариант попробую, он более доступен.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38967432
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Но я это регулярное выражение едва понимаю.
А когда через полгода нужно будет что-то дорабатывать, это для меня вообще черная магия будет.

если обратиться к документации, то чернота магии постепенно рассеется, а при дальнейшем углублении так просто
станет прозрачный, как деревенский самогон бабки Лукерьи ( посёлок "Заветные Ильичи" Тульской обл, 3-я изба от околицы )

(*SKIP) - управляющая конструкция бэктрэкинга, заключается в том, что внутренний указатель НА СТРОКУ механизма передвинется на
следующую сразу после обработанной и найденной подстроку.

то есть, для строки " ааааа бббб 'ццццц' 22222КККК " и выражении / \d+(*SKIP) /
внутренний указатель на подстроку замрёт на позиции <К>.

далее идёт (*FAIL) он же (*F); это означает, что мы сами утверждаем, что шаблон не совпал и передёргиваем затвор
у механизма бэктрэкинга, заставляя его продолжаться с этого места.


что получилось:

строка ":sysuser, 'smsmgr.pl:sms_smart.pl', :domain"

левая ( относительно | ) часть шаблона: / [`] [^']+ ['] /


как только встретится кавычка, сработает (*SKIP) и согласно шаблона указатель подстроки переедет на символ ,запятая.
механизм передёрнется и продолжит уже оттуда; кавычки уже нет и следующим по ходу совпадением будет :domain, с которым
совпадет правая часть шаблона: / :\w+ /.

теперь то, что касается захвата; поскольку других совпадений всё равно нет, то нет и нужды обрамлять круглыми скобками интересующие нас совпадения, нам вернётся только то, что нас интересует.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38978493
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще прав коментатор выше...


задача решаеться не та и не стого бока.



обычно, для строки с параметрами, никто не изобретает велосипед... драйвер базы в подготовленом запросе, сам все это сделает,

И! даже не надо париться к кавычкой...

ведь она может быть двойная!!!
а есчё она может быть экранированная!!!
а есчё после всего шаманства что автор проделал, может оказаться что запрос лексически не верен, вто время как создание подготовленного запроса само бы уже выдало ошибку.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38978498
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос был регулярным выражением исключить шаблоны в кавычках

после заявлений типа
WarstoneРегулярка будет километровая.
возник спортивный интерес.

всё.
...
Рейтинг: 0 / 0
Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
    #38979328
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volodin661вопрос был регулярным выражением исключить шаблоны в кавычках

после заявлений типа
WarstoneРегулярка будет километровая.
возник спортивный интерес.

всё.

ок. спортсмен, а теперь размостри вопрос с экранированой кавычкой.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl, помогите с регулярным выражением (исключить шаблоны в кавычках)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]