Группа захвата RegEx с PHP preg_match не возвращает значения - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь захватить текст «Захватить это» в строке $ ниже.

$string = "</th><td>Capture This</td>";
$pattern = "/<\/th>\r.*<td>(.*)<\/td>$/";

preg_match ($pattern, $string, $matches);

echo($matches);

Однако, это просто возвращает "Массив". Я также попытался напечатать $ match с использованием print_r, но это дало мне «Array ()».

Этот шаблон появится только один раз, поэтому мне нужно, чтобы он совпадал один раз. Может кто-нибудь сказать, пожалуйста, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Проблема в том, что вам требуется символ CR \r. Также вы должны сделать поиск ленивым внутри группы захвата и использовать print_r для вывода массива. Как это:

$pattern = "/<\/th>.*<td>(.*?)<\/td>$/";

Вы можете увидеть это в действии здесь: http://codepad.viper -7.com / djRJ0e

Обратите внимание, что рекомендуется анализировать html с помощью правильного html-анализатора, а не использовать регулярное выражение.

1 голос
/ 22 ноября 2011

Две вещи:

  1. Вам необходимо удалить \r из вашего регулярного выражения, поскольку во входной строке нет символа возврата каретки.

  2. Изменить echo($matches) на print_r($matches) или var_dump($matches)

...