我在这样的代码回购中有一堆调用:
$out = $this->call('myApp.Settings.Menus.something.doSomething', $input);
我想使用正则表达式找到它的所有实例,$this->call()
的第一个参数只包含1个句点。
我认为,我越来越接近:(?=\$this->call\(')(\.){1}(?=',)
为什么不限于1个时期?
答案 0 :(得分:2)
您正在寻找的是一个简单的:
'[^.]+?[.][^.]+?'
这意味着任意数量的非点,一点点,一些非点点。
更好的是,更准确一点:
'\w+?([.]\w+?)?'
这匹配字母数字字符和点。下半场(
可选)?
。
(您的(\.){1}
只匹配一个句号。)
答案 1 :(得分:1)
以下内容应该有效,命名空间将位于第一个捕获组中:
\$this->call\('([^'.]*\.[^'.]*)',
如果您想使用lookbehind / lookahead,以便命名空间是正则表达式匹配的字符串的唯一部分,您可以使用以下内容:
(?<=\$this->call\(')[^'.]*\.[^'.]*(?=',)
答案 2 :(得分:0)
这是一个安全的正则表达式:
\$this\s*\-\>\s*call\s*\(\s*[\'\"]\.[\'\"]
它解释了语言字符之间的空格,如:
$this -> call ( '.'
它仍然是技术上正确的语法。另外,这对于单引号或双引号字符串无关紧要作为第一个参数。