【问题标题】:Regex to find function call php正则表达式查找函数调用php
【发布时间】:2012-04-12 20:56:25
【问题描述】:

我需要正则表达式来查找 php 字符串中的函数调用,我曾尝试在 stackoverflow 上搜索,但我尝试过的都没有。

这个模式:^.*([\w][\(].*[\)])

这将匹配:functionone(fgfg)functionone(fgfg) dhgfghfgh functiontwo() 作为一个匹配项。不是 2 个单独的匹配项(如 functionone(fgfg)functiontwo()

我不知道怎么写,但我认为这是我需要的。
1.任意字符串,后跟(
2. 后跟 )

的任意字符串

然后它应该停止,而不是继续。任何可以帮助我的正则表达式专家?

【问题讨论】:

标签: php regex


【解决方案1】:

我发现您的正则表达式存在 5 个问题

  1. 如果要匹配同一行中的 2 个函数,请不要使用锚点 ^,这会将正则表达式锚定到字符串的开头。

  2. 然后你在开始时不需要.*,可能更像\w+(我不确定PHP中函数名称的规范是什么)

  3. 如果字符类中只有一个条目(并且它不是否定的),则不需要字符类

  4. 括号之间的量词必须是惰性的(后跟?)。所以在这 4 点之后,你的正则表达式看起来像

    \w+\(.*?\)
    
  5. 正则表达式真的是适合这项工作的工具吗?

【讨论】:

  • 这确实有效,非常感谢!但你没事。 Tokenizer 会是一个更好的选择,但它没有发现我的函数是函数,而是 html。
【解决方案2】:

函数签名不是常规语言。因此,您不能使用正则表达式来匹配函数签名。您当前的正则表达式将匹配不是有效函数签名的签名。

我建议您使用 PHP 标记器。

【讨论】:

【解决方案3】:

不要为此使用正则表达式...使用 PHP 的内置 tokenizer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多