是否有一种简单的方法来匹配一个类中除某些字符集之外的所有字符?例如,如果在我可以使用\ w匹配所有unicode字字符集的语言中,是否有办法从该匹配中排除下划线“_”之类的字符?
想到的唯一想法是在每个字符周围使用负向前行/后退,但是当我实际上只想将一个字符与一个正向匹配和一个负向匹配相匹配时,这似乎比必要的复杂。例如,如果&是AND运算符,则可以执行此操作...
^(\w&[^_])+$
最佳答案
这确实取决于您的正则表达式风格。
。净
...仅提供一种简单的字符类设置操作:subtraction。这对于您的示例就足够了,因此您可以简单地使用
[\w-[_]]
如果
-
后跟嵌套的字符类,则将其减去。就那么简单...java
...提供了更丰富的character class set operations集合。特别是,您可以获得
[[abc]&&[cde]]
之类的两个集合的交集(在这种情况下,它会给出c
)。相交与否定相加会给您减法:[\w&&[^_]]
佩尔
...支持extended character classes上的set操作作为实验功能(自Perl 5.18起可用)。特别是,您可以直接减去任意字符类:
(?[ \w - [_] ])
所有其他口味
...(支持前瞻)允许您使用负前瞻来模拟减法:
(?!_)\w
这首先检查下一个字符不是
_
,然后匹配任何\w
(由于前瞻否定而不能是_
)。请注意,每种方法都是完全通用的,因为您可以减去两个任意复杂的字符类。
关于regex - 从字符类中排除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17327765/