正则表达式 - 选择所有不以特定数字开头的文本

时间:2016-08-20 16:46:59

标签: regex

我希望得到所有不以1,2,12,34开头的文字 我写了

^((?!1|2|12|34).)*$   

(^断言一行开头的位置)
如:

https://gist.run/?id=ec8b3b11f4aa4232455605e2ce62872c

问题

  • 它也不会选择中间有1或2的文本(“AB 1 CD”)。
  • 它也没有选择13(因为它以1开头)

如何限制

3 个答案:

答案 0 :(得分:2)

看起来你想要这个:

^(?!(1|2|12|34)\s).*

https://regex101.com/r/gI6sN8/16

答案 1 :(得分:1)

如评论中所述,您需要单词边界和正确的括号位置

-O2

<强> Regex Demo

您也可以使用^(?!(?:1|2|12|34)\b)(.*)$

\D

在你的正则表达式

^(?!(?:1|2|12|34)\D)(.*)$

您正在查找上述替代^((?!1|2|12|34).)*$ 中的任何一个是否在每个位置都是正确的。这就是为什么它不匹配1|2|12|34

的原因

答案 2 :(得分:1)

这有效

^(?!(?:12?|2|34)(?!\d)).+$
https://regex101.com/r/gI6sN8/19

您不希望它的数字之间的有效边界 从它开始,它后面的字符似乎是任何非数字。