我当前的正则表达式应该是特定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 |。)*?
将其更改为在返回前匹配任意数量的字符或换行符在实施之后,我发现搜索现在没有终止。我不确定为什么会这样。即使没有找到结果,也不应该在到达搜索文本的末尾后终止?任何人都可以帮我吗?
答案 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)