我正在使用正则表达式模式在我的代码中找到所有空的foreach循环,所以像这样:
<?php
foreach($object->method() AS $something){
}
到目前为止,我有这个正则表达式,但它不起作用:
foreach\([^\)(?=\s*\{)]*\)\s*\{\s*\}
为了更多地解释模式,我在这里添加了一些注释?#:
foreach\( ?# Search for 'foreach(' string
[^ ?#Start group to capture everything which is not..
\) ?#equal to ')'
(?=\s*\{) ?# with \s*\{ after it. so '){' with possibility of spaces inbetween
]* ?# End is not equal to group, and capture 0 to inf characters of it
\)\s*\{ ?# The foreach statement is closed with ){, with possibility of spaces inbetween
\s* ?# Whitespaces
\} ?# Closing tag
然而,在'('''&gt; method()'
中似乎出错了我认为方括号之间的表达式无效,但我无法弄清楚原因。
答案 0 :(得分:1)
您可以使用以下正则表达式:
foreach\((?:(?!\)\s*{).)*\)\s*{\s*}
请参阅DEMO
无法弄清楚为什么
[ ]
中的字符是按字面意思理解的,因此[ ]
内部的外观不符合您的意图
答案 1 :(得分:1)
你可以用这个:
foreach\(.*\)\S*\{[\s\n\r]*\}
通过使用\S
标识空格,您可以在()
块中支持嵌套foreach ( )
。