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