Могут ли регулярные выражения работать с разными языками? - PullRequest
9 голосов
/ 03 марта 2010

Английский, конечно, не представляет никакой сложности для регулярных выражений, потому что это то, что он был изначально разработан в / для:

Могут ли регулярные выражения понимать этот набор символов?

Французский включает в себя некоторые акцентированные символы, с которыми я не уверен, как сопоставить - то есть, и являются ли они и оба считаются символами слов по регулярному выражению?

Les выражения выражений régulières peuvent comprendre ce jeu de caractères?

Японский язык не содержит того, что я знаю как символы регулярных выражений для сопоставления.

字 字 字 字 字 字 字 、 、 101 101

Ответы [ 7 ]

7 голосов
/ 03 марта 2010

Краткий ответ: да .

Точнее, это зависит от вашего движка регулярных выражений, поддерживающего юникодные совпадения (как описано здесь ).

Подобные совпадения могут сильно усложнить ваши регулярные выражения, поэтому я могу порекомендовать прочитать этот учебник по регулярным выражениям Unicode (также обратите внимание, что сами реализации Unicode могут быть довольно беспорядочными, поэтому вам также может пригодиться чтение * 1011 Джоэла Спольски * статья о внутренней работе наборов символов).

1 голос
/ 03 марта 2010

Вообще говоря, регулярное выражение больше подходит для создания машиночитаемого текста, чем для человека. Во многих отношениях это более общий ответ на весь XML с помощью регулярных выражений; Регулярное выражение по своей природе не способно правильно анализировать человеческий язык, потому что язык более сложен, чем тот, который вы используете для его синтаксического анализа.

Если вы хотите разбить человеческий язык (включая английский), вам следует использовать инструмент анализа языка или даже ИИ, а не просто регулярные выражения.

1 голос
/ 03 марта 2010

Насколько я знаю, не существует какого-либо конкретного шаблона, который вы можете использовать, например, [a-zA-Z], чтобы соответствовать «è», но вы всегда можете сопоставить их по отдельности, то есть [a-zA-Zè 正]

Очевидно, что это может сделать ваше регулярное выражение огромным, но вы всегда можете контролировать это, добавляя свои строки в переменные и только передавая переменные в выражения.

0 голосов
/ 03 марта 2010

/[\p{Latin}]/ должен, например, включать латинский алфавит. Вы можете получить полное объяснение и ссылку здесь .

0 голосов
/ 03 марта 2010

Этот SO поток может помочь. Он включает классы символов Unicode , которые вы можете использовать в регулярном выражении (например, [Ll] - все строчные буквы, независимо от языка).

0 голосов
/ 03 марта 2010

Это зависит от реализации и набора символов. Обычно ответ «Да», но это может потребовать дополнительной настройки с вашей стороны.

Например, в Perl значение таких вещей, как \ w, изменяется выбранной локалью (используйте локаль).

0 голосов
/ 03 марта 2010

речь идет не о регулярном выражении, а о платформе, которая его выполняет. Ява и .net Я думаю, что очень хорошо в обработке Unicode. так что «и е оба рассматриваются как символы слова в регулярном выражении» верно.

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