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);


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

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

Войти через центр авторизации
Похожие вопросы