Regular Expression - Two Digit Range (23-79)?

2020-07-10 05:48发布

I have been reading the regex questions on this site but my issue seems to be a bit different. I need to match a 2 digit number, such as 23 through 75. I am doing this on an HP-UX Unix system. I found examples of 3 - 44 but or any digit number, nothing that is fixed in length, which is a bit surprising, but perhaps I am not understand the variable length example answer.

标签: regex
5条回答
虎瘦雄心在
2楼-- · 2020-07-10 06:06

Since you're not indicating whether this is in addition to any other characters (or in the middle of a larger string), I've included the logic here to indicate what you would need to match the number portion of a string. This should get you there. We're creating a range for the second numbers we're looking for only allowing those characters. Then we're comparing it to the other ranges as an or:

(2[3456789]|[3456][0-9]|7[012345])

As oded noted you can do this as well since sub ranges are also accepted (depends on the implementation of REGEX in the application you're using):

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

Based on the title you would change the last 5 to a 9 to go from 75-79:

(2[3-9]|[3-6][0-9]|7[0-9])

If you are trying to match these numbers specifically as a string (from start to end) then you would use the modifiers ^ and $ to indicate the beginning and end of the string.

There is an excellent technical reference of Regex ranges here:

http://www.regular-expressions.info/numericranges.html

If you're using something like grep and trying to match lines that contain the number with other content then you might do something like this for ranges thru 79:

grep "[^0-9]?(2[3-9]|[3-6][0-9]|7[0-9])[^0-9]?" folder
查看更多
等我变得足够好
3楼-- · 2020-07-10 06:24

This tool is exactly what you need: Regex_For_Range

From 29 to 79: \b(2[3-9]|[3-7][0-9])\b

From 29 to 75: \b(29|[3-6][0-9]|7[0-5])\b

And just for fun, from 192 to 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 :)

查看更多
该账号已被封号
4楼-- · 2020-07-10 06:25

You have two classes of numbers you want to match:

  • the digit 2, followed by one of the digits between 3 and 9
  • one of the digits between 3 and 7, followed by any digit

Edit: Well, that's the title's range (23-79). Within your question (23-75), you have three:

  • the digit 2, followed by one of the digits between 3 and 9
  • one of the digits between 3 and 6, followed by any digit
  • the digit 7, followed by one of the digits between 0 and 5
查看更多
Evening l夕情丶
5楼-- · 2020-07-10 06:29

This should do it:

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

^ and $ will make it strict that it will match only 2 numbers, so in case that you have i.e 234 it won't work.

查看更多
三岁会撩人
6楼-- · 2020-07-10 06:30

If I want 2 digit range 0-63

/^[0-9]|[0-5][0-9]|6[0-3]$/
  1. [0-9] will allow single digit from 0 to 9
  2. [0-5][0-9] will allow from 00 to 59
  3. 6[0-3] will allow from 60 till 63

This way you can take Regular Expression for any Two Digit Range

查看更多
登录 后发表回答