Regex 正则表达式-两位数范围(23-79)?

Regex 正则表达式-两位数范围(23-79)?,regex,Regex,我一直在阅读这个网站上的正则表达式问题,但我的问题似乎有点不同。我需要匹配一个2位数的数字,比如23到75。我在HP-UX Unix系统上执行此操作。我找到了3到44的例子,但也没有任何数字,没有什么是固定长度的,这有点令人惊讶,但也许我不理解可变长度的例子答案。< p>因为你没有指示这是不是除了任何其他字符(或者在一个更大的字符串的中间),我在这里加入了逻辑,以指示需要什么来匹配字符串的数字部分。这应该能让你达到目的。我们正在为第二个数字创建一个范围,只允许这些字符。然后我们将其与其他范围进行

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

< p>因为你没有指示这是不是除了任何其他字符(或者在一个更大的字符串的中间),我在这里加入了逻辑,以指示需要什么来匹配字符串的数字部分。这应该能让你达到目的。我们正在为第二个数字创建一个范围,只允许这些字符。然后我们将其与其他范围进行比较,如

(2[3456789]|[3456][0-9]|7[012345])
正如oded所指出的,您也可以这样做,因为子范围也被接受(取决于您正在使用的应用程序中正则表达式的实现):

根据标题,您可以将最后5个从75-79改为9:

(2[3-9]|[3-6][0-9]|7[0-9])
如果您试图将这些数字作为字符串(从开始到结束)进行匹配,则可以使用修饰符
^
$
来指示字符串的开始和结束

这里有关于Regex系列的优秀技术参考:

如果您正在使用grep之类的工具,并试图将包含数字的行与其他内容进行匹配,那么您可能会对范围到79执行类似操作:

grep "[^0-9]?(2[3-9]|[3-6][0-9]|7[0-9])[^0-9]?" folder

您有两类要匹配的数字:

  • 数字2,后跟3和9之间的一个数字
  • 介于3和7之间的数字之一,后跟任意数字
编辑:这就是标题的范围(23-79)。在你的问题(23-75)中,你有三个:

  • 数字2,后跟3和9之间的一个数字
  • 介于3和6之间的数字之一,后跟任意数字
  • 数字7,后跟0和5之间的一个数字

此工具正是您所需要的:Regex\u For\u范围

从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][3-9]|[3-6][0-9]|[7][0-5])$/

^
$
将严格要求它只匹配2个数字,因此如果您有
即234,它将不起作用。

如果我想要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-6][0-9]| 7[0-5])
    对。我遇到过这样的情况,即这在每个实现中都不起作用,但根据标准它应该起作用。如果通过,则返回true2345@RobinVanPersi我们使用的是
    |
    ,意思是或,我们使用的是
    []< /代码>括号内表示允许的字符。@ RoopiangPrsii的OP没有指示这是否在字符串的中间。几乎-直到“代码>75 < /COD>”,而不是<代码> 79 > /代码>。@ ODD在主题中写了79,然后在帖子的正文中写了75。不清楚他到底想要哪一个。为标题示例中的拼写错误道歉,这两个数字都是示例,关键点只有两个数字。但我明白你的意思,79确实符合[3-7][0-9]的整个范围,75更准确,因为我不能总是填满整个范围。因此,3部分范围的答案就是我想要的。你确定你想要一个正则表达式吗?似乎转换为整数类型,然后进行整数比较可能更合适。特别是如果范围将来会改变的话。让我支持@Paulpro的建议——虽然正则表达式可以做到这一点,但对于这项工作来说,它是一个糟糕的(我很想说“糟糕”)工具。@AbsoluteƵERØ我对HP-UX不熟悉,但他可以在任何命令行上做到这一点,对吗?我很确定您可以在HP-UX上安装类似bash的shell。在我看来,更直观的是,如果是在某些脚本中,那么当范围更改时,需要更改的只是代码中范围的边界,而不是正则表达式。如果它不是在脚本中,只是一次性交易,那么在我看来,正则表达式是一种完全有效的方法。顺便说一句,你的回答对OP的问题是一个很好的回答:)@AbsoluteƵERØ:你不明白“为了工作”的哪一部分?我们中的一些人实际上是专业人士,他们关心诸如可读性和可维护性之类的东西,而不仅仅是在特定情况下为特定情况下工作的能力。@AbsoluteƵERØ:你还没有解释你不懂的“为了工作”的哪一部分,但更清楚的是,你根本不理解这个概念。HP-UX在这里几乎是完全不相关的——它是一种相当普通的UNIX,具有所有常用工具。当然,由于OP没有解释他到底在做什么工作,所以不可能确切地说什么是对的,即使他说得足够清楚,100%地表明正则表达式是错误的选择。此外,如果他们使用
    grep
    之类的东西来匹配包含他们正在搜索的数字的行,这将不起作用。@AbsoluteƵERØ-不,我的朋友,我没有否决你的答案。我花了5分钟多的时间来测试这些要求,然后发布了它,然后我才检查了你的答案。工具现在有凭证提示,你认识所有者吗?@weston太糟糕了!我会联系他们,让他们知道这种身份验证的原因,然后我会回来告诉你。如果你认识他们,也许你可以说服他们开放源代码。在github上发布,或在此处发布
    /^[0-9]|[0-5][0-9]|6[0-3]$/