我正在尝试为更多“标准”用户代理字符串创建一个正则表达式。到目前为止我已经
了^(\w+)\/([\d+\.]+)+\s\((.+)+
这使我了解产品/系统信息的右括号。问题是,一旦我添加\)
,每个正则表达式引擎我都会通过扼流圈(我认为)进入无限循环。在这里有某种循环,我没有看到吗?
答案 0 :(得分:2)
我想你想要更像这样的东西:
(\w+)\/([\d.]+)\s*(?:\(([^)]+)\))?
当你使用像([\d+\.]+)+
这样的嵌套量词时,你的大部分表现都被杀死了,我认为你主要是因为你不知道你正在使用什么。这个扩展的解释应该有所帮助:
( (?# start capture group #1)
\w+ (?# match 1+ word characters)
) (?# end capture group)
\/ (?# match / literally)
( (?# start capture group #2)
[\d.]+ (?# match 1+ digit or . characters)
) (?# end capture group)
\s* (?# match optional whitespace)
(?: (?# start non-capturing group)
\( (?# match ( literally)
( (?# start capture group #3)
[^)]+ (?# match 1+ non-) characters)
) (?# end capture group)
\) (?# match ) literally)
)? (?# end optional non-capturing group)
这部分取决于你的表达和我的UA字符串:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.92 Safari/537.36
。
如您所见,您可以\w+
(第一组),然后是/
,然后是[\d.]+
(第二组,.
没有特殊含义一个字符类,不需要转义),后跟空格,后面是括号中的一组可选数据(第三组)。