Я уверен, что это легко, и насколько я искал и искал здесь на 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]