正则表达式选择未注释的语句

时间:2017-03-31 12:48:33

标签: python regex

echo '<pre>'; print_r(1); echo '</pre>';  <- select this

 echo '<pre>'; print_r($temp); echo '</pre>';  <- select this without space

// echo '<pre>'; print_r($temp); echo '</pre>';  <- skip this



echo '<pre>'; print_r($temp3); echo '</pre>';  <- select this

print_r($temp1);  <- select this

// print_r($temp11);  <- skip this

    print_r($temp2);  <- select this without spaces

    if (true) {
        print_r($temp4);  <- select this without spaces

    }

我有一个带有print语句的代码我只需要选择非注释语句

这是一个正则表达式

^((?!\/\/\s?))(echo '<pre>';\s?)?(.+)?(print_r)(\.?)(\w+)?\((.+)?\);( echo '<\/pre>';)?

DEMO

如何跳过空格?' print_r($temp4);' 或者如何更改正则表达式以使其正常工作?

4 个答案:

答案 0 :(得分:1)

import re

rgx = re.compile('^[ \t]*((echo|print_r).*;)', re.MULTILINE)
for line in rgx.finditer(code):
    print line.group(1)

# echo '<pre>'; print_r(1); echo '</pre>';
# echo '<pre>'; print_r($temp); echo '</pre>';
# echo '<pre>'; print_r($temp3); echo '</pre>';
# print_r($temp1);
# print_r($temp2);
# print_r($temp4);

答案 1 :(得分:0)

也许是这样:

^(?!\/\/) *(echo '<pre>';\s?)?(.+)?(print_r)(\.?)(\w+)?\((.+)?\);( echo '<\/pre>';)?

答案 2 :(得分:0)

这个正则表达式不会捕获该行,如果有(//, @*, /*, <!--)注释,否则它将捕获没有空格的所有内容,希望这将解决您的问题。

([\n]|^)(?P<group>(?! *\/\/| *@\*| *\/\*| *<!--| *\\\*)([^\n]*?)(\S)(((?! *\/\/| *@\*| *\/\*| *<!--| *\\\*).)*))

答案 3 :(得分:0)

以下是我对你想要的解释: Regex101

"^(?!\s*?//)\s*?(print_r\(.*\);?|echo\s*?'<pre>.*;).*$"gm

您可以获得有关它在网络应用程序一侧的功能的完整说明