我有一个字符串可能如下所示:
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)
不知道该怎么做。
答案 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);
答案 1 :(得分:1)
试试这个......
preg_match_all('/(?:show|hide)+\([^\)]+\)/i', $str, $matches);