需要正则表达式来查找特定模式的所有子字符串

时间:2015-03-03 12:14:38

标签: php regex

我有一个字符串可能如下所示:

IF([f1.attr_78431_]=1)  THEN(SHOWHIDE([f1.attr_78795_],[f1.attr_78641_];  [f1.attr_78795_])) 
ELSE IF([f1.attr_78431_]=2)  THEN(SHOWHIDE([f1.attr_78798_];[f1.attr_78795_], [f1.attr_78736_]))
ELSE(HIDE([f1.attr_78435_]))

我想找到这些模式的所有子串:

SHOWHIDE([f1.attr_78795_],[f1.attr_78641_];  [f1.attr_78795_])
HIDE([f1.attr_78435_])
SHOW([f1.attr_78435_],[f1.attr_78641_])

并忽略所有其他模式,例如

IF([f1.attr_78431_]=1)

不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

使用preg_match_all函数。

(?:(?:SHOW)?HIDE|SHOW)\([^\)]*\)

代码:

$re = "/(?:(?:SHOW)?HIDE|SHOW)\\([^\\)]*\\)/m";
$str = "IF([f1.attr_78431_]=1) THEN(SHOWHIDE([f1.attr_78795_],[f1.attr_78641_]; [f1.attr_78795_])) \nELSE IF([f1.attr_78431_]=2) THEN(SHOWHIDE([f1.attr_78798_];[f1.attr_78795_], [f1.attr_78736_]))\nELSE(HIDE([f1.attr_78435_]))";

preg_match_all($re, $str, $matches);

DEMO

答案 1 :(得分:1)

试试这个......

preg_match_all('/(?:show|hide)+\([^\)]+\)/i', $str, $matches);