如果我想找到短语“IF(NEW。”和“!”)之间的文本,RegEx应该是什么?

时间:2010-03-29 05:06:21

标签: php regex

如果我想查找短语“IF (NEW.”和“!”之间的文字,那么RegEx应该是什么?

同样我认为模式为$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 个答案:

答案 0 :(得分:2)

试试这个:

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"]

答案 1 :(得分:2)

您可以尝试:

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 :(得分:0)

您可以使用以下模式:

如果\ S *(新。[\ S \ S] *?

您使用的是perl吗?