Поиск текста в юникоде с помощью регулярных выражений - PullRequest
4 голосов
/ 25 августа 2009

При поиске файла, написанного на хинди (деванагри) (UTF-16), возникла следующая проблема.

Файл содержит:

त्रास ततत जुग नींद ना हा बु

Обратите внимание, что первый символ 'त्र' является кратной кодовой точкой of + ् + र Теперь при поиске «त» я получаю 4 совпадения, включая त первого символа. Я использую Java.

Как я могу искать 'त', которые не являются частью нескольких символов кодовой точки.

Любая помощь будет оценена. :)

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Полагаю, вы можете сделать это, используя свойства юникода.

त(?!\p{M}+)

Должно совпадать с кодовой точкой as, если за ней не следуют никакие кодовые точки в категории M, которые являются символами, предназначенными для объединения с другими символами. Он использует отрицательный взгляд, чтобы сделать это утверждение.

E: и если это не сработает сразу, попробуйте

\uxxxx(?!\p{M}+)

Где xxxx - это номер кодовой точки символа त.

0 голосов
/ 25 августа 2009

Кажется, что символ «'» на самом деле является лигатурой или конъюнктом, а не символом с несколькими точками кода. Поэтому я думаю, вы получите ожидаемый результат (если вы не хотите совпадать с glyphs ). Смотри http://en.wikipedia.org/wiki/Devanagari#Conjuncts.

...