regex php – найти вещи в div с определенным идентификатором

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

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

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

Вот мой код:

$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; 

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

Ваш код работает для меня, если вы меняете вложенные двойные кавычки вокруг $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.

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

 $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>'; 

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

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