Исключение некоторых символов из диапазона регулярных выражений - PullRequest
2 голосов
/ 20 августа 2011

У меня есть регулярное выражение, которое выбирает слова в диапазоне Unicode

[\u0D80-\u0DFF]*

Я хочу исключить слова, содержащие определенный символ, например \ u0D92.

Как мне изменить выражение

Ответы [ 4 ]

2 голосов
/ 20 августа 2011

Просто построить два диапазона;то есть сделайте пробелы в вашем диапазоне для значений, которые вы хотите исключить ...

[\u0D80-\u0D91\u0D93-\u0DFF]*
1 голос
/ 21 августа 2011

.Net поддерживает другое обозначение для Вычитание класса символов :

[\u0D80-\u0DFF-[\u0D92]]*

Пример (с использованием механизма .Net): http: //regexstorm.net/tester

0 голосов
/ 20 августа 2011

Используйте lookaheads для реализации пересечения множества:

(?x)(?:
     (?!\x{d92})
     [\x{d80}-\x{dff}]
)

Это создает атом, который соответствует вашим критериям.Пройдите отбор по желанию.

Я не доверяю вашей \uXXXX записи.Это всегда плохой знак, когда вы видите что-то, что использует это, потому что это какая-то древняя нотация Unicode 1, которая предполагает только Plane 0.Это означает, что он не был полезен со времен Unicode 2, в далеком прошлом тысячелетии.Я бы избегал этого, если это вообще возможно, потому что вы не хотите заводить вредные привычки, которые не работают для 16/17 пространства имен Unicode.

Поэтому я использовал стандартную запись \x{...}используется в Java 7, ICU и Perl, которые не фанатичны в отношении плоскостей 1-16 Unicode.Действительно, в языках, представленных в представлении UTF-16 (да, Java, я смотрю на вас), это единственный возможный способ создания диапазонов, отличных от BMP.

0 голосов
/ 20 августа 2011

Вы можете вычесть символов из класса символов, выполнив

[\u0D80-\u0DFF&&[^\u0D92]]*

[a-z&&[^egi]] совпадение всех символов от a до z, за исключением e, g и i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...