首次出现时使用特定字符结束正则表达式

时间:2014-11-08 14:07:00

标签: php regex preg-match-all

我有几个源代码,我正在应用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]。但 一旦检测到结束括号,我怎么能阻止它? )'就像第一个一样。

我可以在提取后处理该行,但是如何使用正则表达式呢? 我搜索了类似问题的答案,但它们太具体了。

1 个答案:

答案 0 :(得分:1)

将正则表达式修改为

#method_".$function_name[1]."\([^)]*\){1}#

你出错的地方

#method_".$function_name[1]."\(.*\){1}#

在这里您使用\(.*\) .*匹配任何内容,包括)

所做的更改

  • \([^)]*\)此处[^)]*它与)以外的任何内容匹配,以便以)

  • 的第一次出现结束
  • 您也可以使用.*?而不是.*来使用延迟匹配,这种匹配是gready并且消耗尽可能多的字符