preg_match возвращает символы, отличные от входной строки

[Постановили] Добавление модификатора /u регулярное выражение исправляет эту проблему, если кто-то борется с этим. Кредит М.И. в комментариях 🙂

Рассмотрим следующий код:

var_dump('Trimiteţi');
preg_match('/^([\p{L}]+)/', 'Trimiteţi', $matches);
print_r($matches);

Я использую его для фильтрации слова, которое может иметь нелатинские символы, используя \p{L}также обратите внимание, что я не использую конечную строку $ символ регулярного выражения в preg_match

Теперь к проблеме, при выполнении кода локально я получаю этот вывод:

string 'Trimiteţi' (length=10)
Array ( [0] => TrimiteÅ [1] => TrimiteÅ )

Я пытался выполнить код в Песочница PHP, и выводит нечто подобное:

string(10) "Trimiteţi"Array
(
[0] => Trimite�
[1] => Trimite�
)

Обратите внимание, что по крайней мере на этот раз он не испортил оригинал var_dump слово.

Что здесь происходит? Почему использование preg_match меняет слово? Худшая часть об этом, если я добавлю $ до конца регулярного выражения, это будет НЕ СООТВЕТСТВУЕТ, так как я предполагаю, что эти преобразованные символы не могут быть интерпретированы как конец строки или что-то в этом роде. Пожалуйста, помогите мне

Изменить: код файла, который я запускаю, установлен на «text / x-php; charset = utf-8»
Edit2: дополнительно я использовал regex101.com, и при использовании РЕГУЛЯРНОГО ВЫРАЖЕНИЯ «^ [\ p {L}] + $» и слова «Trimiteţi» оно кажется совпадающим. Вы даже можете переключить РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ на «^ ([\ p {L}] +) $», добавив группу захвата и вывод сайта:

MATCH 1
1.  [0-9]   `Trimiteţi`

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]