Intereting Posts
Отправить письмо по электронной почте в Codeignign с помощью Gmail Есть ли способ получить количество записей из запроса с помощью Zend-framework? Возвращать внешний ключ с помощью DQL-запроса Как расшифровать зашифрованную строку php с помощью Android? Не удается отправить JSON в виде строки через AJAX CakePHP 3: Отсутствует ошибка маршрута для маршрута, который существует Почему mysqli_insert_id () всегда возвращает 0? Фильтровать, сортировать и разбивать на страницы в Codeigniter PHP: Как использовать cron (или другой метод), чтобы каждый раз запускать скрипт PHP? Компилировать ошибку PHP с помощью freetype Почему PHP APC-кеш не увеличивается во все время PHP и MYSQL: как я могу игнорировать пустые переменные из Использование временного, вращающегося хэша или строки для обеспечения безопасности Ошибка анализа синтаксиса Symfony2 phpUnit YAML Как получить целевой URL с помощью cURL?

регулярное выражение find-and-replace-in-html не выполняется

У меня есть регулярное выражение, которое просматривает содержимое html для некоторых ключевых слов, которые раньше работали, но теперь терпит неудачу, и я не понимаю, почему. (Регулярное выражение появилось из этого потока .)

$find = '/(?![^<]+>)(?<!\w)(' . preg_quote($t['label']) . ')\b/s'; $text = preg_replace_callback($find, 'replaceCallback', $text); function replaceCallback($match) { if (is_array($match)) { $htmlVersion = $match[1]; $urlVersion = urlencode($htmlVersion); return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion . '">' . $htmlVersion . '</a>'; } return $match; } 

Сообщение об ошибке указывает на вызов preg_replace_Callback и говорит:

 Warning: preg_replace_callback() [function.preg-replace-callback]: Unknown modifier 't' in /frontend.functions.php on line 43 

Related of "регулярное выражение find-and-replace-in-html не выполняется"

Обратите внимание : это не попытка предоставить исправление для регулярного выражения. Здесь просто показать, насколько сложно (смею сказать, невозможно) создать регулярное выражение, которое успешно проанализирует HTML. Даже хорошо структурированный XHTML был бы кошмарно сложным, но плохо структурированный HTML-код не требует регулярных выражений.

Я согласен на 100%, что использование регулярных выражений для попытки разбора HTML – очень плохая идея. Следующий код использует предоставленную функцию для анализа некоторых простых тегов HTML. Он выполняет вторую попытку, когда находит вложенный тег HTML <em>Test<em> :

 $t['label'] = 'Test'; $text = '<p>Test</p>'; $find = '/(?![^<]+>)(?<!\w)(' . preg_quote($t['label']) . ')\b/s'; $text = preg_replace_callback($find, 'replaceCallback', $text); echo "Find: $find\n"; echo 'Quote: ' . preg_quote($t['label']) . "\n"; echo "Result: $text\n"; /* Returns: Find: /(?![^<]+>)(?<!\w)(Test)\b/s Quote: Test Result: <p><a class="tag" rel="tag-definition" title="Click to know more about Test" href="?tag=Test">Test</a></p> */ $t['label'] = '<em>Test</em>'; $text = '<p>Test</p>'; $find = '/(?![^<]+>)(?<!\w)(' . preg_quote($t['label']) . ')\b/s'; $text = preg_replace_callback($find, 'replaceCallback', $text); echo "Find: $find\n"; echo 'Quote: ' . preg_quote($t['label']) . "\n"; echo "Result: $text\n"; /* Returns: Find: /(?![^<]+>)(?<!\w)(Test)\b/s Quote: Test Result: <p><a class="tag" rel="tag-definition" title="Click to know more about Test" href="?tag=Test">Test</a></p> Warning: preg_replace_callback() [function.preg-replace-callback]: Unknown modifier '\' in /test.php on line 25 Find: /(?![^<]+>)(?<!\w)(\<em\>Test\</em\>)\b/s Quote: \<em\>Test\</em\> Result: */ function replaceCallback($match) { if (is_array($match)) { $htmlVersion = $match[1]; $urlVersion = urlencode($htmlVersion); return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion . '">' . $htmlVersion . '</a>'; } return $match; }