regex - 从字符类中排除字符

标签 regex set-difference character-class

是否有一种简单的方法来匹配一个类中除某些字符集之外的所有字符?例如,如果在我可以使用\ 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/

相关文章:

java - 查找字符串中所有出现的分割子串

python - 在列表中查找匹配项并使用正则表达式显示范围

c++列表在设置差异后不调整大小

regex - 为什么\p{Lu} 匹配小写字母?

java 正则表达式 : match input starting with non-number or empty string followed by specific pattern

python - 在 python 上使用正则表达式进行复杂的数据清理

python - Python正则表达式来匹配和替换gradle依赖项输出

c++ - 保持顺序的 vector 差异

r - 在 R 中查找对称差异(与交叉点相反)的函数?

字符类中的java正则表达式双反斜杠