UserAgent正则表达式进入无限循环

时间:2014-05-23 20:27:20

标签: regex

我正在尝试为更多“标准”用户代理字符串创建一个正则表达式。到目前为止我已经

^(\w+)\/([\d+\.]+)+\s\((.+)+

这使我了解产品/系统信息的右括号。问题是,一旦我添加\),每个正则表达式引擎我都会通过扼流圈(我认为)进入无限循环。在这里有某种循环,我没有看到吗?

1 个答案:

答案 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)

Demo


这部分取决于你的表达和我的UA字符串:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.92 Safari/537.36

如您所见,您可以\w+(第一组),然后是/,然后是[\d.]+(第二组,.没有特殊含义一个字符类,不需要转义),后跟空格,后面是括号中的一组可选数据(第三组)。