regex php - найти вещи в div с определенным идентификатором - PullRequest
3 голосов
/ 16 августа 2011

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

Однако я не могу заставить этот конкретный бит вернуть то, что я хочу, поэтому, возможно, кто-то может мне помочь.

У меня есть div с определенным идентификатором "user-sub-commhome" - я хочу вытащить текст из этого div.Текст окружен тегами, но я могу легко использовать strip_tags, чтобы убрать их.Я использую регулярные выражения, чтобы попытаться извлечь данные.

Вот мой код:

$intro = "<div id="user-sub-summary">Summary</div>
<div id="user-sub-commhome"><em>Commercial</em></div>
<div id="whatever">whatever</div>";

$regex = '#\<div id="user-sub-commhome"\>(.+?)\<\/div\>#s';
preg_match($regex, $intro, $matches);
$match = $matches[0];
echo $match;

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

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

Ваш код работает для меня, если вы заменяете двойные кавычки вокруг $intro на одинарные кавычки:

$intro = '<div id="user-sub-summary">Summary</div>
<div id="user-sub-commhome"><em>Commercial</em></div>
<div id="whatever">whatever</div>';

$regex = '#\<div id="user-sub-commhome"\>(.+?)\<\/div\>#s';
preg_match($regex, $intro, $matches);
$match = $matches[0];
echo $match;

Возможно, вы захотите прочитать несколько известных советов по регулярным выражениям и HTML.

1 голос
/ 16 августа 2011

Я не буду объяснять, почему использование регулярных выражений для разбора php - плохая идея . Я думаю, что проблема здесь в том, что вы не активировали error_reporting или просто не просматриваете свой журнал ошибок. определение $intro -строки так, как вы это делаете, должно вызывать множество проблем (не зависящая от / не определенная строка). это должно выглядеть так:

$intro = "<div id=\"user-sub-summary\">Summary</div>
<div id=\"user-sub-commhome\"><em>Commercial</em></div>
<div id=\"whatever\">whatever</div>";

или это:

$intro = '<div id="user-sub-summary">Summary</div>
<div id="user-sub-commhome"><em>Commercial</em></div>
<div id="whatever">whatever</div>';

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

0 голосов
/ 16 августа 2011

В вашем примере кода $matches[0] содержит все совпадающие части, а не группу захвата. Группа захвата находится в $matches[1]

...