我当前的正则表达式应该获取特定 PHP 函数的返回值(如果它是字符串)。
我的第一个正则表达式有效,但我知道它并不匹配所有情况,所以我想对其进行扩展。
这是第一个正则表达式:
"public function getVersion\\(\\)\\s*?{\\s*.*return\\s*'(.+)';"
这适用于:
public function getVersion() {
return '1.0.0';
}
但不适用于函数名称和返回值之间有线条的情况:
public function getVersion() {
# SomeComment
some_function()
return '1.0.0';
}
这是大修版本:
"public function getVersion\\(\\)\\s*?{(\\s|.)*?return\\s*'(.+)';"
我使用 (\s|.)* 将其更改为在返回之前匹配任意数量的字符或换行符?
但是,在实现之后,我发现搜索现在并没有终止。我不知道为什么会这样。即使没有找到结果,是否应该在到达搜索文本末尾后终止?谁能帮我解决这个问题吗?
最佳答案
您可以使用 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)
关于python - 非贪婪正则表达式不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33075915/