是否可以基于字符串字符创建正则表达式?
让我用一个例子来解释一下,我正在寻找一个正则表达式来验证字符串中,如果第一个数字是 0,那么第二个不能是。但其余的数字可以是他们想要的数字,例如:
0102 - Bien
0123 - Bien
0012 - Mal
但是,相反,如果字符串以 0 以外的数字开头,则第二个数字可以是 0 或您想要的数字,例如:
1234 - Bien
1000 - Bien
1089 - Bien
让我们看看您是否可以帮助我进行基于数字的验证,因为我还没有找到关键。
有了这个,我们创建了两个可能的匹配组:
当然这个正则表达式可以简化:
所以开头
0
是可选的,但如果你这样做,第二个数字不能是 a0
,因为该组[1-9]
不允许它。(?:..)
允许您创建组但不捕获它。这个想法是所有不是最初的都是可选的(这就是为什么在这个非捕获组之后有0
一个问号:(?:..)?
+
*
这个表达式,和第一个一样,可以很容易地简化:
根据评论,可以得出以下结论:
^0$
^0?[1-9]\d*$
将我们将拥有的 2 个案例分组:
^(0|0?[1-9]\d*)$
重要说明:如果正在评估的是一个内部包含要定位的模式的字符串,例如:0 00 0102 0123 0012 03 Casa 120 Puerta 2516 Caracas
在这种情况下,它由单词块分隔,留下正则表达式:
\b(0|0?[1-9]\d*)\b
如果字符串有多行,请记住添加全局和多行参数。
从字面上阅读您的问题,答案比看起来更简单:
就这些。如果匹配
^00
,那就错了,如果不匹配,没关系。这只是否定正则表达式的最终结果的问题。当然,如果您也有兴趣验证它确实是一个数字,我会选择linuxexp 的答案来解决它。