Почему использование переменных в preg_match_all терпит неудачу в php? - PullRequest
0 голосов
/ 01 марта 2012

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

Вот что у меня есть:

Первая попытка (использование одинарных кавычек для безопасности):

    $pattern_areacode = '/\<a name\=\"'. $code . '\"\>'. $code . '\<\/a\>.*?(\<td\b[^>]*\>       (.*?)\<\/td\>).*?<\/tr\>/';
    preg_match_all($pattern_areacode, $contents, $ac_match);

проблема: я напечатал шаблон, и он выглядел хорошоВсе же это не возвращает никаких результатов.

Вторая попытка (с использованием double):

    $pattern_areacode = "/\<a name\=\"$code\"\>$code\<\/a\>.*?(\<td\b[^>]*\>(.*?)\<\/td\>).*?<\/tr\>/";
    preg_match_all($pattern_areacode, $contents, $ac_match);

Проблема: двойные кавычки перед тем, как $ удаляется.Weird.

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

Как мне заставить это работать?

Спасибо!

1 Ответ

2 голосов
/ 01 марта 2012

Убедитесь, что ваши входы экранированы и не содержат ничего, что регулярное выражение может интерпретировать как шаблон (что может привести к неудаче вашего совпадения). Это можно легко сделать, используя preg_quote. Итак, если вы еще этого не сделали:

$code = preg_quote($quote);

Кроме того, я рекомендую использовать реальный анализатор HTML, а не совпадения с регулярными выражениями, возможно, стоит использовать DOMDocument

...