【问题标题】:Ending regex with a specific character on first appearance在第一次出现时以特定字符结束正则表达式
【发布时间】:2014-11-08 14:07:00
【问题描述】:

我有几个要应用 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]。但 一旦它检测到右括号' ) '就像第一个一样,我该如何停止它。

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

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    修改正则表达式为

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

    你错在哪里

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

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

    所做的更改

    • \([^)]*\) 这里[^)]* 它匹配除) 以外的任何内容,因此它以) 的第一次出现结束

    • 您还可以使用 .*? 代替 .* 的惰性匹配,这很糟糕,并且尽可能多地消耗字符

    【讨论】:

    • 这就是我需要的。解释得很好!...谢谢
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2011-01-02
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多