PCRE, кажется, удаляет определенные символы - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть фрагмент текста (часть французского, часть английского), в котором несколько раз есть символы канадского доллара европейского стиля ($C).Когда я пытаюсь использовать регулярное выражение с использованием традиционных символов или символов Юникода, символы были удалены из текста и не могут быть сопоставлены.Я использовал ленивое регулярное выражение, так что если он не находит ожидаемых символов, он все еще работает.

Кроме того, текст находится в документе xml utf-8 и отображается из веб-интерфейса (сделано собственными силами).

Ответы [ 3 ]

0 голосов
/ 01 февраля 2011

Избегайте $ внутри RegExp, знак доллара имеет особое значение в RegExp.

0 голосов
/ 02 февраля 2011

Проблема оказалась ошибкой в ​​коде перед тем, как я вызвал eval (). Что-то во французском юникоде шло вразрез с кодом, переданным в eval, поэтому без объединения текста и регулярных выражений все работало нормально.

0 голосов
/ 01 февраля 2011

В Perl регулярные выражения и код отображаются в ascii, но если вы хотите встроить юникод в ваш текст, сначала вы должны иметь редактор, который выполняет юникод, во-вторых, вы должны сказать Perl, что ваш исходный код содержит юникод (с use utf8' прагма).

Если вы не хотите этого делать, вы можете встраивать (в Perl) кодовые точки в строки (регулярные выражения) с помощью конструкции, подобной этой: $ regex = / это некоторый текст, это: \ x {1209} кодовая точка символ Юникода /;

Соответствует символу, ЕСЛИ источник данных декодирован в Юникоде (интернализован) и содержит этот символ.

Редактировать - Я не думаю, что для канадского доллара есть юникод, скорее, «$ C», как кто-то сказал, что вы должны избегать $, если регулярное выражение интерполировано. Если вы сохраняете $ C, класс символов [$ C] соответствует $ или C, а не комбинации. Может быть (?: \ $ | \ $ C) было бы лучшим якорем.

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