Почему это регулярное выражение не работает в PHP? - PullRequest
3 голосов
/ 24 октября 2008

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

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

См. Пример:

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

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

Ответы [ 4 ]

5 голосов
/ 24 октября 2008

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

3 голосов
/ 24 октября 2008

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

2 голосов
/ 24 октября 2008

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

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

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

2 голосов
/ 24 октября 2008

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

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

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