Проблема RegEx в PHP - PullRequest
       0

Проблема RegEx в PHP

1 голос
/ 19 августа 2010

Я не мог придумать правильный заголовок. У меня есть некоторые данные, как -

$data = <<<EOD
<strong>
HHHHH
<strong>
TTTTT
<strong>
RRRRRRR
<strong>
EOD;

В основном выше одного - только пример. В реальности данные выглядят как -

<strong>Some Title</strong>
DATA
<strong>Some other Title</strong>
OTHER DATA

Образец : http://pastebin.com/cxzZWDZ8

Теперь я применяю следующее RegEx.

preg_match_all("%<strong>(.*?)<strong>%s", $data, $all);

Это соответствует HHHHH и RRRRRRR, но я хочу соответствовать TTTTT. Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

Вы можете использовать предварительное утверждение, чтобы убедиться, что <strong> есть, но не является частью матча (поэтому он может быть частью следующего матча):

</strong>(.*?)(?=<strong>)

Однако, если у вас есть HTML, вам следует использовать анализатор HTML для его чтения, а не регулярное выражение, которое печально плохо разбирает разметку HTML / XML. С DOMDocument::loadHTML(), getElementsByName и т. Д. У вас будет гораздо более надежный способ очистки данных страницы.

0 голосов
/ 19 августа 2010

возможно, это просто опечатка, но вы не должны писать что-то вроде:

preg_match_all("%</strong>(.*?)<strong>%s", $data, $all);

на вашем первом примере, я не вижу, что вы закрываете теги ... но на "реальном" примере выявляются .. может быть, это все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...