正则表达式转向否定验证

时间:2014-01-09 09:17:23

标签: regex

我有以下正则表达式,检查字符串中是否有8个字符(字母或数字)后跟空格数字和逗号:

    ^.*[a-zA-Z0-9]{8,} \d*,.*$

以下Regex与以下内容不符:

    Hello 23, abc 2, me 5,

但是匹配以下内容:

    My8Chara 12, abc 2,

我想颠倒正则表达式。如果字符串不包含8个字符,后跟空格,数字和逗号,我想要正则表达式匹配。

有谁知道如何反转Regex?我不能使用像Regex.IsMatch这样的东西,因为我使用的是通用验证器。我必须用正则表达式写出来。

所需的输出是:

    "" -> match
    "abc 123, def 234," -> match
    "my8chara 123, only5 12" -> does not match -> it contains 8 characters followed by a space a number and a comma

提前致谢, 圣拉斐尔

2 个答案:

答案 0 :(得分:2)

您可以使用这样的负面预测:

^(?!.*[a-zA-Z0-9]{8,} \d*).+$

regex101 demo

否定前瞻的格式为(?! ... )。如果里面的内容匹配,则整场比赛将失败。

因此,如果匹配.*[a-zA-Z0-9]{8,} \d*,则整个匹配失败。

编辑:如果您仍希望将句子与结构Hello 23, abc 2, me 5,匹配,那么我建议:

^(?!.*[a-zA-Z0-9]{8,} \d*).*(?:[a-zA-Z0-9]+ \d*,)?.*$

答案 1 :(得分:1)

^(?!.*[a-zA-Z0-9]{8} \d+,)\w.*$

Live demo

也匹配空字符串:

^(?!.*[a-zA-Z0-9]{8} \d+,).*$