大家。 你能否就如何在1中加入以下3个正则表达式给我一些建议?
preg_match_all('/>\s*([\w-]+)\s*</', $str, $matches_1);
preg_match_all('/<\?=\s*([\w-]+)\s*\?>/', $str, $matches_2);
preg_match_all('/echo\s*["|']+\s*([\w-]+)["|']+/', $str, $matches_3);
更新
preg_match_all(
'/
>\s*([\w-]+)\s*<
|
<\?=\s*([\w-]+)\s*\?>
|
echo\s*("|')+\s*([\w-]+)("|')+
/x',
$str, $matches_123);
对我来说,上面的语法只有在一行写入并删除x修饰符时才有效。出于某种原因,不这样做会导致:
警告:preg_match_all()[function.preg-match-all]:编译失败:丢失)在偏移125处...
我已经通过将3个字符串中的正则表达式拆分并将它们连接起来解决了这个问题,但这很麻烦。
答案 0 :(得分:1)
使用|
preg_match_all(
'/
>\s*([\w-]+)\s*<
|
<\?=\s*([\w-]+)\s*\?>
|
echo\s*("|&\#039;)+\s*([\w-]+)("|&\#039;)+
/x',
$str, $matches_123);
您可能希望将每个部分括起来(
parens )
,以便在结果列表中将它们分开。但是其他子表达式可能需要?:
作为前缀。替代方案["|']
也是无效的(方括号不能以这种方式工作,可能会偶然起作用,但不是可靠的匹配)。
答案 1 :(得分:1)
取决于加入你的意思......你的意思是“匹配这个,否则,最后”?如果是这样的话:
/>\s*([\w-]+)\s*<|<\?=\s*([\w-]+)\s*\?>|echo\s*(?:"|')+\s*([\w-]+)(?:"|')+/