非贪婪的正则表达式不会终止

时间:2015-10-12 07:53:53

标签: python regex

我当前的正则表达式应该是特定PHP函数的返回值,如果它是一个字符串。

我的第一个正则表达式有效,但我知道它与所有情况都不匹配,所以我想扩展它。

这是第一个正则表达式:

"public function getVersion\\(\\)\\s*?{\\s*.*return\\s*'(.+)';"

这适用于:

public function getVersion() {
    return '1.0.0';
}

但不适用于函数名和return之间有行的情况:

public function getVersion() {
    # SomeComment
    some_function()
    return '1.0.0';
}

以下是经过大修的版本:

"public function getVersion\\(\\)\\s*?{(\\s|.)*?return\\s*'(.+)';"

我使用(\ s |。)*?

将其更改为在返回前匹配任意数量的字符或换行符

在实施之后,我发现搜索现在没有终止。我不确定为什么会这样。即使没有找到结果,也不应该在到达搜索文本的末尾后终止?任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您可以使用re.DOTALL参数进行换行。考虑一下:

import re

text = '''public function getVersion() {
    # SomeComment
    some_function()
    return '1.0.0';
}'''

regex_comp = re.compile("public function getVersion\\(\\)\\s*?{\\s*.*return\\s*'(.+)';", re.DOTALL)

print regex_comp.search(text).group(1)