【发布时间】:2013-08-05 07:59:06
【问题描述】:
我想匹配大于 4.1 的版本号。 我为此构建了以下正则表达式
(([4-9]+\d*(\.((\*)|([2-9]+(\.((\*)|([0-9]+)))?)))?))
但它甚至匹配 '4' 而不匹配 '5.1'、'6.1' 等。
如何构造这样的正则表达式?请帮忙。
【问题讨论】:
标签: regex string-matching
我想匹配大于 4.1 的版本号。 我为此构建了以下正则表达式
(([4-9]+\d*(\.((\*)|([2-9]+(\.((\*)|([0-9]+)))?)))?))
但它甚至匹配 '4' 而不匹配 '5.1'、'6.1' 等。
如何构造这样的正则表达式?请帮忙。
【问题讨论】:
标签: regex string-matching
试试这个:
([4-9]\.[2-9]\d*|[4-9]\.\d\d+|[5-9](\.\d+)?|\d\d+(\.\d+)?)
匹配 4.1 以上的所有版本
编辑:修复了不带点的版本
【讨论】:
\d 甚至是非欧洲数字,例如 1234655567789...(非常丑陋的东西!)
\d 切换到[0-9]
re.UNICODE 它会做同样的事情 ideone.com/eQE2d2
你可以试试这个:
(4\.(1[0-9]*[1-9]|[2-9][0-9]*)|([5-9]|[1-9][0-9]+)(\.[0-9]+)?)
这将匹配:
4. 后跟:
1 后跟零个或多个 0-9 和一个或多个 1-9
2-9 后跟零个或多个 0-9 或
5-9 或 1-9 后跟一个或多个 0-9
0-9 根据这将如何使用,您可能需要考虑在您的模式周围添加开始/结束锚点,以便不允许其他字符:
^(4\.(1[0-9]*[1-9]|[2-9][0-9]*)|([5-9]|[1-9][0-9]+)(\.[0-9]+)?)$
你可以测试一下here。
【讨论】:
greater than 4.1。你的匹配 4.1