Ruby简单的正则表达式语法错误

时间:2011-10-02 09:55:23

标签: ruby regex

我是Ruby的新手,我正在为服务器编写代码。 代码已有半年历史。与此同时,Chrome更新版本为14版。

所以这是我的代码:

supported_browsers = /Chrome\/[3-9]|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/

正如您可以看到Chrome 3-9,但现在我尝试将其更改为:

supported_browsers = /Chrome\/[3-15]|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/

我收到语法错误。帮我弄清楚什么是错的。

3 个答案:

答案 0 :(得分:3)

您的错误在此处:[3-15]这是一个字符类,其范围为3到1,不允许使用。

我猜你想:[3-9]|1[0-5]表示3到9或10到15

完整的正则表达式是:

supported_browsers = /Chrome\/([3-9]|1[0-5])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/

答案 1 :(得分:3)

[3-9]numeric range。它表示3或9之间的单个数字。数字范围不能按预期方式工作:[3-15]不是有效范围。

如果您只想匹配数字范围,可以使用[0-9]{1,2}。它匹配0到99之间的所有内容。或者[0-9]+以减少限制。

supported_browsers = /Chrome\/[0-9]+|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/

如果你真的想验证3-15范围内的包含,那么使用正则表达式并不是最好的选择。事实上,使用正则表达式,您的范围应该是[3-9]|1[0-5],并且您想要的限制越多,正则表达式就越复杂。

supported_browsers = /Chrome\/(?:[3-9]|1[0-5])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-   9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/

答案 2 :(得分:1)

[3-15]不检查范围。对于你必须使用的范围[3-9] | 1 [0-4]将匹配1-14 e.g。

supported_browsers = /Chrome\/([3-9]|1[0-4])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/