Я боролся с Regex, чтобы соответствовать нескольким последовательным символам Unicode.
Сейчас у меня есть: [ -~£±§]*
Где -~£±§
– это по существу весь английский алфавит + все дополнительные символы (! @ # $% … и т. Д.) …
и [] * означает совпадение между нулем и неограниченным временем.
Но если моя тестовая строка – это что-то вроде:
ZÃ © lia Gattai
Тогда это не будет соответствовать …
Я прочитал некоторые другие темы, они предлагают использовать \ X и \ p {M} * и другие вещи. Я могу сопоставить один символ, используя эти методы, но не могу сопоставить несколько символов подряд.
Я решил использовать: [ -~£±§\X]*
или [ -~£±§\p{M}]*
сделал бы это, но не кубики.
Помощь приветствуется.
Спасибо всем!
Zélia Gattai
– латинская интерпретация Zélia Gattai
.
Вы не должны пытаться сопоставить такие последовательности символов вручную. Скорее используйте preg_match
с поддержкой Unicode. Для этого есть флаг /u
.
И для сопоставления нескольких букв Unicode вам просто нужно:
preg_match('/[\p{L}]+/u', $text);
Вам просто нужно убедиться, что ваш исходный текст правильно закодирован UTF-8. См. utf8_encode
или utf8_decode
в случае, если он был дважды закодирован ранее.
Кажется, ваша проблема заключается в том, что тестовая строка кодируется в UTF-8. В этом случае вам просто нужно включить модификатор «u», например preg_match('/^[\p{L}]*$/u','Ámos')