Почему это регулярное выражение не работает в PHP?

Мне нужно сопоставить (без учета регистра) "abcd" и необязательный символ товарного знака

Регулярное выражение: /abcd(™)?/gi

См. Пример:

preg_match("/abcd(™)?/gi","AbCd™  U9+",$matches);
print_r($matches);

Когда я запускаю это, $matches ничем не заполняется ... Даже не создается как пустой массив. Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
953
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я подозреваю, что это как-то связано с буквальным обозначением товарного знака.

Возможно, вы захотите узнать, как использовать Юникод с вашими регулярными выражениями, а затем встроить escape-последовательность для символ товарного знака.

Ответ принят как подходящий

Как кодируется ваш файл? У PHP есть проблемы с юникодом. В вашем случае попробуйте использовать escape-последовательность \x99 вместо прямого внедрения символа TM.

Примечание: Я не гуру PHP. Однако, похоже, это проблема кодировок символов. Например, ваш PHP-файл может быть закодирован как win-1252 (где ™ закодирован как \x99), а данные, которые вы пытаетесь сопоставить, могут быть закодированы как UTF-8 (где ™ закодирован как \xe2\x84\xa2), или наоборот ( т.е. ваш файл - UTF-8, а ваши данные - win-1252). Попробуйте посмотреть в этом направлении и расскажите нам больше о том, что вы делаете.

Я не возражаю, если я потеряю репутацию или статус «избранного» ответа, правда. Я просто хотел бы напомнить людям, что «голосование за / против» означает «это было полезно / не помогло в отношении вопроса», а не «Мне нравится / не нравится ваш ответ» или что-то подобное. И когда вы голосуете против, оставьте комментарий, почему. Это правильно.

tzot 24.10.2008 04:52

Это была комбинация вещей ... это было регулярное выражение, которое, наконец, сработало:

/abcd(\xe2\x84\xa2)?/i

Мне пришлось удалить модификатор /g и изменить символ tm на \xe2\x84\xa2.

Другие вопросы по теме