排除字符的RegEx直到第二个字符才开始匹配

时间:2015-09-22 16:04:45

标签: regex

我正在尝试创建一个包含所有ascii的正则表达式,但不包括某些字符,例如“+”或“%” - 我目前正在使用它:

^[\x00-\x7F][^%=+]+$

但我注意到(使用各种RegEx验证器)此模式仅开始与2个字符匹配。它不匹配“a”但会匹配“ab”。如果我删除“[^]”部分,(^ [\ x00- \ x7F] + $)则模式匹配一​​个字符。我已经搜索了其他选项,但到目前为止还没有找到任何选项。我希望模式开始匹配1个字符,但也排除字符。任何建议都会很棒!

3 个答案:

答案 0 :(得分:3)

您可以在此处使用否定前瞻来排除某些字符:

^((?![%=+])[\x00-\x7F])+$

RegEx Demo

(?![%=+])否定前瞻,会断言匹配的字符不是[%=+]之一。

答案 1 :(得分:3)

试试这个:

^(?:(?![%=+])[\x00-\x7F])+$

<强> Demo

这将循环,确保“坏”字符不存在负向前瞻,然后匹配“好”字符,然后重复。

答案 2 :(得分:0)

您可以简单地从\x00-\x7f范围中排除这些字符(使用每个字符的十六进制值)。

+----------------+
|Char|Dec|Oct|Hex|
+----------------+
| %  |37 |45 |25 |
+----------------+
| +  |43 |53 |2B |
+----------------+
| =  |61 |75 |3D |
+----------------+

<强>正则表达式:

^[\x00-\x24\x26-\x2A\x2C-\x3C\x3E-\x7F]+$

DEMO

引擎方面,这比为每个角色尝试断言更有效。