Я столкнулся с непонятной проблемой при использовании регулярных выражений в PHP. Мой код не выводит ничего в терминал:
<?php
$html = '<a href="example.com" title="Какой-то текст с буквой i внутри">Ссылка</a>';
echo preg_replace_callback(
'/<a(\s[^>]+)* href="([^"]+)"(\s[^>]+)*>/i',
function ($matches) {
var_dump($matches);
return $matches[0];
},
$html
);
Странно, но если я уберу букву ‘i’ из текста в атрибуте title, все начинает работать. Например, если заменить слово “внутри” на “внутр”, код выполняется без ошибок.
Что я упускаю в своем регулярном выражении? Почему буква ‘i’ так влияет на его работу?
При этом аналогичный код на JavaScript работает без проблем:
'<a href="example.com" title="Какой-то текст с буквой i внутри">Ссылка</a>'.match(/<a(\s[^>]+)* href="([^"]+)"(\s[^>]+)*>/i);
Как это объяснить и как исправить проблему в PHP?