所以我想到了以下的正则表达式:
([^\s\\]+(?:\\.[^\s\\]*)*)(?:.*?)(\S+\.php\b)
测试链接:https://regex101.com/r/NV6Bk4/4
它匹配命令行的二进制和脚本名称。例如:
php --strict myscript.php --arg=value
在第一组和第二组中匹配php
和myscript.php
。
问题出在中间的部分:(?:.*?)
,这导致正则表达式在大量输入时变得非常缓慢。有没有办法优化呢?由于没有模式,我想不到任何方法。
为了澄清,我要匹配的规则是:匹配任何路径到命令,可能包含转义空格。忽略后面的任何参数。匹配以.php结尾的文件,忽略其后面的任何内容。命令应该在第一组中,文件名应该在第二组中。
^([^\s\\]*+(?:\\.[^\s\\]*)*).*?(\S+\.php\b)
,请参见 演示。如果你的匹配从字符串的开头开始,请使用^
,并且在第一个否定字符类中使用一种占有量词。 - Wiktor Stribiżew