Почему preg_match не находит буквальных слов

Используя PHP, я пытаюсь проверить наличие различных слов и шаблонов в строке, но не могу понять, почему я вижу странное поведение при попытке сопоставления определенных слов.

Пример 1:
Почему следующее не возвращает 1?

$test = 'clen=a.le​ngth;for(i=0;i<clen;i++)b+=St​ring.fr​omCh​arCode(a.char​CodeAt(i)^2)';

$result = preg_match('/(string)/i', $test, $matches);

$ result всегда равно нулю для вышеприведенного, даже если в строке темы присутствует слово «String».

Пример 2:
Однако, допустим, я немного изменил свое регулярное выражение на следующее:

$test = 'clen=a.le​ngth;for(i=0;i<clen;i++)b+=St​ring.fr​omCh​arCode(a.char​CodeAt(i)^2)';
$result = preg_match('/st.+(ring)/i', $test, $matches);

Выше возвращает значение 1 для $ результата. Похоже, когда я разделю слово «строка» на отдельные части, я могу получить совпадение.

Пример 3:
Еще раз, когда я немного изменяю регулярное выражение в этом примере, оно также возвращает ноль, но я не уверен почему:

$test = 'clen=a.le​ngth;for(i=0;i<clen;i++)b+=St​ring.fr​omCh​arCode(a.char​CodeAt(i)^2)';
$result = preg_match('/(tring)/i', $test, $matches);

Попытка сопоставления в последовательности символов, таких как «tring», возвращает 0, но при сопоставлении в «ring» она возвращает 1. Но «tring» не звучит как специальный тип или зарезервированное слово!

Это поведение также одинаково для различных других слов, таких как «документ» и «unescape», и я уверен, что есть много других.

Я предполагаю, что некоторые слова, возможно, обрабатываются механизмом регулярных выражений по-разному, потому что они могут быть зарезервированы или специальны в некотором роде, но я не смог найти официального объяснения вышеуказанному поведению.

Я прошу прощения, если я упустил что-то действительно очевидное и был бы очень признателен, если кто-то может объяснить это мне.
Большое спасибо.

-1

Решение

Я думаю, что ваше первое регулярное выражение в порядке. Смотри сюда
https://regex101.com/r/tO9vN8/1

Но, похоже, проблема с кодировкой, мне пришлось переписать выражение — если я копирую с этого сайта, регулярное выражение не совпадает.

Я надеюсь, что это будет правильное направление …

1

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

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

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