我有一个正则表达式,用于选择unicode范围内的单词
[\u0D80-\u0DFF]*
我想排除包含某个字符的字词,例如\ u0D92。
我该如何更改表达式?
答案 0 :(得分:2)
建立两个范围;也就是说,在你想要排除的值的范围内留出差距......
[\u0D80-\u0D91\u0D93-\u0DFF]*
答案 1 :(得分:1)
.Net支持Character Class Subtraction的另一种表示法:
[\u0D80-\u0DFF-[\u0D92]]*
示例(使用.Net引擎):http://regexstorm.net/tester
答案 2 :(得分:0)
您可以通过
从字符类中减去字符[\u0D80-\u0DFF&&[^\u0D92]]*
[a-z&&[^egi]]
匹配a
到z
之外的所有字符,e
,g
和i
除外。
答案 3 :(得分:0)
使用前瞻来实现集合交集:
(?x)(?:
(?!\x{d92})
[\x{d80}-\x{dff}]
)
创建符合您标准的原子。随意取得资格。
我不相信你的\uXXXX
符号。当你看到使用它的东西时,它总是一个坏的迹象,因为它是一些古老的Unicode 1遗留符号,它只假设平面0。这意味着它从Unicode 2开始就没那么有用,这可以追溯到上一个千年。如果可能的话,我会避免它,因为你不想陷入不适合16/17的Unicode命名空间的坏习惯。
因此我使用了Java 7,ICU和Perl中使用的标准\x{...}
符号,这种符号与Unicode的Planes 1-16不相符。实际上,在使用UTF-16表示的语言中(是的,Java,我正在看着你),这是进行非BMP范围的唯一可能方式。