2010-03-29 49 views
0

如果要查找短語「IF (NEW.」和「!」之間的文本,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); 

如果我想$捕獲作爲一個數組,其中的所有值將被存儲其中將與以上模式相匹配這種模式?

回答

2

您可以嘗試:

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

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

如果你想允許的空白IF(NEW之間的任何金額,你可以使用正則表達式:如果你想允許ATLEAST

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

IF(NEW之間的一個空格可以使用正則表達式:

#IF\s+\(NEW\.(.*?)!# 
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"] 
0

您可以使用以下模式:?

IF \ S *(NEW [\ S \ S] *?

您是否使用perl?

+0

不,我正在使用PHP – 2010-03-29 05:19:37