我一直在阅读这个网站上的正则表达式问题,但我的问题似乎有点不同。我需要匹配一个 2 位数字,例如 23 到 75。我在 HP-UX Unix 系统上执行此操作。我找到了 3 - 44 但或任何数字的示例,没有任何长度固定的数字,这有点令人惊讶,但也许我不理解可变长度示例答案。
5 回答
由于您没有指出这是否是任何其他字符的补充(或位于较大字符串的中间),因此我在此处包含了逻辑以指示您需要匹配字符串的数字部分。这应该能让你到达那里。我们正在为我们正在寻找的第二个数字创建一个范围,只允许这些字符。然后我们将它与其他范围进行比较or
:
(2[3456789]|[3456][0-9]|7[012345])
正如 oded 指出的那样,您也可以这样做,因为子范围也被接受(取决于您正在使用的应用程序中 REGEX 的实现):
(2[3-9]|[3-6][0-9]|7[0-5])
根据标题,您可以将最后的 5 更改为 9,以从 75 到 79:
(2[3-9]|[3-6][0-9]|7[0-9])
如果您尝试将这些数字专门匹配为字符串(从头到尾),那么您将使用修饰符^
并$
指示字符串的开头和结尾。
这里有一个很好的正则表达式范围的技术参考:
http://www.regular-expressions.info/numericranges.html
如果您正在使用 grep 之类的东西并尝试将包含数字的行与其他内容相匹配,那么您可能会对范围 79 执行类似的操作:
grep "[^0-9]?(2[3-9]|[3-6][0-9]|7[0-9])[^0-9]?" folder
这个工具正是您所需要的:Regex_For_Range
从 29 到 79:\b(2[3-9]|[3-7][0-9])\b
从 29 到 75:\b(29|[3-6][0-9]|7[0-5])\b
只是为了好玩,从 192 年到 1742 年:\b(19[2-9]|[2-9][0-9]{2}|1[0-6][0-9]{2}|17[0-3][0-9]|174[0-2])\b
:)
如果我想要 2 位数范围 0-63
/^[0-9]|[0-5][0-9]|6[0-3]$/
- [0-9] 将允许从 0 到 9 的单个数字
- [0-5][0-9] 将允许从 00 到 59
- 6[0-3] 将允许从 60 到 63
这样您就可以对任何两位数范围使用正则表达式
您有两类要匹配的数字:
- 数字 2,后跟 3 到 9 之间的数字之一
- 3 到 7 之间的数字之一,后跟任意数字
编辑: 嗯,这就是标题的范围(23-79)。在您的问题 (23-75) 中,您有三个:
- 数字 2,后跟 3 到 9 之间的数字之一
- 3 到 6 之间的数字之一,后跟任意数字
- 数字 7,后跟 0 到 5 之间的数字之一
这应该这样做:
/^([2][3-9]|[3-6][0-9]|[7][0-5])$/
^
并且$
会严格要求它只匹配 2 个数字,所以如果你有i.e 234
它,它将无法工作。