正则表达式找到空的foreach循环

时间:2015-06-30 18:09:23

标签: php regex

我正在使用正则表达式模式在我的代码中找到所有空的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()'

中似乎出错了

我认为方括号之间的表达式无效,但我无法弄清楚原因。

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

foreach\((?:(?!\)\s*{).)*\)\s*{\s*}

请参阅DEMO

  

无法弄清楚为什么

[ ]中的字符是按字面意思理解的,因此[ ]内部的外观不符合您的意图

答案 1 :(得分:1)

你可以用这个:

foreach\(.*\)\S*\{[\s\n\r]*\}

通过使用\S标识空格,您可以在()块中支持嵌套foreach ( )

https://regex101.com/r/pC7uU8/2