我有几个源代码,我正在应用preg_match_all。
这是我试过的:
$lazy = file_get_contents("Some_Source_code.txt");
if(!preg_match("#method_(.*)\(int var0, int var1, int var2\)#", $lazy, $function_name))
die("nothing here");
preg_match_all("#method_".$function_name[1]."\(.*\){1}#", $lazy, $matches);
print_r($matches);
但输出如下:
Array
(
[0] => Array
(
[0] => method_2393(int var0, int var1, int var2)
[1] => method_2393(0, 0, 0)).equals(this.field_1351.getText().toString()))
)
)
好吧,我想要的是$ matches [0] [1]。但
一旦检测到结束括号,我怎么能阻止它? )'就像第一个一样。
我可以在提取后处理该行,但是如何使用正则表达式呢? 我搜索了类似问题的答案,但它们太具体了。
答案 0 :(得分:1)
将正则表达式修改为
#method_".$function_name[1]."\([^)]*\){1}#
你出错的地方
#method_".$function_name[1]."\(.*\){1}#
在这里您使用\(.*\)
.*
匹配任何内容,包括)
所做的更改
\([^)]*\)
此处[^)]*
它与)
以外的任何内容匹配,以便以)
您也可以使用.*?
而不是.*
来使用延迟匹配,这种匹配是gready并且消耗尽可能多的字符