php regex用于包含不超过1个点的命名空间

时间:2012-10-30 23:18:19

标签: regex netbeans

我在这样的代码回购中有一堆调用:

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

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

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

为什么不限于1个时期?

3 个答案:

答案 0 :(得分:2)

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

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

这意味着任意数量的非点,一点点,一些非点点。

更好的是,更准确一点:

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

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

(您的(\.){1}只匹配一个句号。)

答案 1 :(得分:1)

以下内容应该有效,命名空间将位于第一个捕获组中:

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

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

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

答案 2 :(得分:0)

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

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

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

$this ->   call ( '.'

它仍然是技术上正确的语法。另外,这对于单引号或双引号字符串无关紧要作为第一个参数。