如何使用正则表达式来捕获这个特定的年龄范围?

时间:2016-07-06 09:04:50

标签: regex

我有一组年龄数据,如下所示;

1
2
3
4
5
6
7
8
9
10
1,1
1,2
1,3
2,12
11,13,15
7,8,12

等等......我正在尝试使用正则表达式来定位1-7之间的某个年龄段,但仅限于8岁以下的孩子不在该组中。

(?![8-9]|1[0-7]$)\b[1-7]\b

我目前的比赛包括所有单数字线1,2,3,4,5,6,7 - 完美。它匹配1,2和1,3例如 - 完美。然而,它也匹配2,12和7,8,12的线 - 不是我想要的。

如何解决任何建议将不胜感激?在此先感谢,我将继续尝试纠正。

2 个答案:

答案 0 :(得分:3)

你可以将它放在一个组中并重复它:

^(?:[^\n\d]*\b[1-7]\b[^\n\d]*)+$

请参阅a demo on regex101.com

<小时/> 细分,这说:

^        # anchor it to the beginning
(?:      # a non capturing group
[^\n\d]* # not a number or newline
\b       # a word boundary
[1-7]    # a digit from 1-7
\b       # another boundary
[^\n\d]* # same as above
)+       # repeat the whole construct at least once
$        # THE END

<小时/> 或者正如其他人所说,explode()它在逗号上并以编程方式进行比较。

答案 1 :(得分:2)

试试这个:

^([1-7]{1}(,|$))*$

refiddle.com - example 1;

您还可以排除,结尾的字符串:

^([1-7]{1}(,(?=[1-7])|$))*$

refiddle.com - example 2;