0

我在这样的代码仓库中有一堆调用:

$out = $this->call('myApp.Settings.Menus.something.doSomething', $input);

我想使用正则表达式查找它的所有实例,其中第一个参数$this->call()仅包含一个句点。

我想,我越来越接近了:(?=\$this->call\(')(\.){1}(?=',)

为什么不限制为1期?

4

3 回答 3

2

您正在寻找的是一个简单的:

 '[^.]+?[.][^.]+?'

这意味着任意数量的非点,后跟一个点,然后又是一些非点。

更好的是,更精确一点:

  '\w+?([.]\w+?)?'

这匹配字母数字字符和一个点。下半场(可选)?

(你(\.){1}只会匹配一个时期。)

于 2012-10-30T23:20:30.307 回答
1

以下应该可以工作,命名空间将在第一个捕获组中:

\$this->call\('([^'.]*\.[^'.]*)',

如果您想使用后向/前瞻,以便命名空间是正则表达式匹配的字符串的唯一部分,您可以使用以下内容:

(?<=\$this->call\(')[^'.]*\.[^'.]*(?=',)
于 2012-10-30T23:21:51.907 回答
0

这是一个安全的正则表达式:

\$this\s*\-\>\s*call\s*\(\s*[\'\"]\.[\'\"]

它解释了语言字符之间的空格,例如:

$this ->   call ( '.'

它在技术上仍然是正确的语法。此外,这与将单引号或双引号字符串作为第一个参数无关。

于 2012-10-30T23:25:55.727 回答