gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Почему PCRE (PHP) не читает символ < (меньше) при разборе верстки?

При разборе верстки почему-то игнорируется символ `<` (меньше).
Стоит мне удалить этот символ - все отрабатывает корректно - совпадения находит.

Проблема наблюдается на
Denwer
Openserver
phptester.com
...
везде короче.

Во всех мануалах верстка парсится корректно, если регулярку начинать с символа `<` (меньше). Видимо какая-то настройка в конфиге PHP мешает это делать, но какая?

Экранировать символ `<` пробовал (ну типа, может это именованный $match) -- все равно не спасает.

Вот код. Скорее всего ошибка распространенная какая-то не могу понять причину.

<?
  $text = <<<TEXT
    <scriptsrc=""></script>
    <script blablabla src=""></script>
    <script src=""></script>
    <script blabl abla src=""></script>
    <script bla 22bl2 abla src=""></script>
TEXT;

  $match = array();
  preg_match_all('/<script/ium', $text, $match);

  echo "<pre>";
  print_r($match);
  • Вопрос задан
  • 377 просмотров
Решения вопроса 2
DevMan
@DevMan
возможно, древняя версия pcre-либы, либо баг.
у мну код отрабатывает без проблем.
да и не только у мну:
https://regex101.com/r/iS8uZ5/1
ideone.com/iPdPxn
Ответ написан
gzhegow
@gzhegow Автор вопроса
aka "ОбнимиБизнесмена"
Текущее решение:
<?
  $text = <<<TEXT
    <scriptsrc=""></script>
    <script blablabla src=""></script>
    <script src=""></script>
    <script blabl abla src="123.js"></script>
    <script bla 22bl2 abla src="tanks/tank.js"></script>
TEXT;

  $match = array();
  $tmp = str_replace("<script", "|script", $text);
  preg_match_all('/\|script[^<>]+src=[\'"]([^\'"]+)/ium', $tmp, $match);

  echo "<pre>";
  print_r($match);


Но вопрос все еще актуален! ПОЧЕМУ (мать такая)?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽