PHP регулярное выражение необязательно соответствует целому слову - PullRequest
4 голосов
/ 10 мая 2011

Я использую php, и мне нужно почистить некоторую информацию из некоторых откликов на сайт.я имитирую как ajax-запрос от браузера, так и обычный (весь) запрос страницы браузером, однако ajax-ответ немного отличается от всего запроса страницы в этом разделе html.

ajax-ответаэто: <div id="accountProfile"><h2>THIS IS THE BIT I WANT</h2><dl id="accountProfileData">

однако нормальный ответ: <div id="accountProfile"><html xmlns="http://www.w3.org/1999/xhtml"><h2>THIS IS THE BIT I WANT</h2><dl id="accountProfileData">

т.е. в ответе ajax отсутствует тег: <html xmlns="http://www.w3.org/1999/xhtml">.мне нужно получить биты между тегами h2.очевидно, я не могу просто почистить страницу для <h2>THIS IS THE BIT I WANT</h2><dl id="accountProfileData">, поскольку эти теги могут встречаться в других местах и ​​не содержать нужной мне информации.

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

<?php
$pattern = '/\<div id="accountProfile"\>\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';
preg_match($pattern, $haystack, $matches);
print_r($matches);
?>

Может кто-нибудь показать мне, как я должен изменить шаблон, чтобы при желании также соответствовать тегу <html xmlns="http://www.w3.org/1999/xhtml">?если это поможет упростить стог сена для краткости, это нормально.

1 Ответ

2 голосов
/ 10 мая 2011

Я не проверял, но вы можете попробовать это:

    $pattern = '/\<div id="accountProfile"\>(\<html xmlns=\"http://www.w3.org/1999/xhtml\"\>){0,1}\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';
...