Каким должен быть RegEx, если я хочу найти текст между фразами "IF (NEW." И "!"? - PullRequest
0 голосов
/ 29 марта 2010

Каким должен быть RegEx, если я хочу найти текст между фразами "IF (NEW." и "!"?

Точно так же я думаю о паттерне как $pattern = '/(?<= IF (NEW.)[^ !]+/';

Я соответствую ему как

$input = $row4['ACTION_STATEMENT'];`/*BEGIN IF (NEW.name != OLD.name) THEN INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.name, newvalue = NEW.name, field = "name"; END IF; IF (NEW.alias != OLD.alias) THEN INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.alias, newvalue = NEW.alias, field = "alias"; END IF; END*/`
preg_match_all($pattern, $input, $captures);

Что если я хочу, чтобы $ captures представлял собой массив, в котором будут храниться все значения, которые будут совпадать с указанным выше шаблоном, находящимся между этим шаблоном?

Ответы [ 3 ]

2 голосов
/ 29 марта 2010

Вы можете попробовать:

if(preg_match('#IF \(NEW\.([^!]*)!#',$input,$matches)) {
 echo "$matches[1]";
}

или

if(preg_match('#IF \(NEW\.(.*?)!#',$input,$matches)) {
 echo "$matches[1]";
}

Если вы хотите разрешить любое количество пробелов между IF и (NEW, вы можете использовать регулярное выражение:

#IF\s*\(NEW\.(.*?)!#

Если вы хотите разрешить хотя бы один пробел между IF и (NEW, вы можете использовать регулярное выражение:

#IF\s+\(NEW\.(.*?)!#
2 голосов
/ 29 марта 2010

Попробуйте это:

preg_match("/IF \\(NEW\\.\\)(.*?)!/", $input, $captures);

Тест:

$input = "foo bar IF (NEW.) capture this text! fu bah";
preg_match("/IF \\(NEW\\.\\)(.*?)!/", $input, $captures);

print_r($captures);

// ["IF (NEW.) capture this text!", " capture this text"]
0 голосов
/ 29 марта 2010

Вы можете использовать следующий шаблон:

IF \ с *? (NEW. [\ S \ S] *?! * * 1003

Вы используете Perl?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...