13

我一直在阅读这个网站上的正则表达式问题,但我的问题似乎有点不同。我需要匹配一个 2 位数字,例如 23 到 75。我在 HP-UX Unix 系统上执行此操作。我找到了 3 - 44 但或任何数字的示例,没有任何长度固定的数字,这有点令人惊讶,但也许我不理解可变长度示例答案。

4

5 回答 5

14

由于您没有指出这是否是任何其他字符的补充(或位于较大字符串的中间),因此我在此处包含了逻辑以指示您需要匹配字符串的数字部分。这应该能让你到达那里。我们正在为我们正在寻找的第二个数字创建一个范围,只允许这些字符。然后我们将它与其他范围进行比较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
于 2013-05-23T18:30:45.893 回答
4

这个工具正是您所需要的: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:)

于 2013-05-23T18:34:37.953 回答
3

如果我想要 2 位数范围 0-63

/^[0-9]|[0-5][0-9]|6[0-3]$/
  1. [0-9] 将允许从 0 到 9 的单个数字
  2. [0-5][0-9] 将允许从 00 到 59
  3. 6[0-3] 将允许从 60 到 63

这样您就可以对任何两位数范围使用正则表达式

于 2016-09-20T08:59:22.587 回答
0

您有两类要匹配的数字:

  • 数字 2,后跟 3 到 9 之间的数字之一
  • 3 到 7 之间的数字之一,后跟任意数字

编辑: 嗯,这就是标题的范围(23-79)。在您的问题 (23-75) 中,您有三个:

  • 数字 2,后跟 3 到 9 之间的数字之一
  • 3 到 6 之间的数字之一,后跟任意数字
  • 数字 7,后跟 0 到 5 之间的数字之一
于 2013-05-23T18:32:23.510 回答
-1

这应该这样做:

/^([2][3-9]|[3-6][0-9]|[7][0-5])$/

^并且$会严格要求它只匹配 2 个数字,所以如果你有i.e 234它,它将无法工作。

于 2013-05-23T18:44:30.557 回答