Регулярное выражение для получения содержимого тега привязки InnerHTML в php - PullRequest
1 голос
/ 10 августа 2010

Мне нужно получить якорный тег innerHTML, используя RegExp в php.Предположим, у меня есть синтаксис, такой как

   <div class="detailsGray"><span class="detailEmail"><a href="http://example.com"class="fontLink">examples@mail.com</a></span></div>

Попробуйте получить его по

preg_match_all('/class=\"fontLink"\>.*\<\/a\>/', $raw, $matches);

, но он не работает.Только мне нужно получить examples@mail.com, используя RegExp и preg_match_all ().Спасибо

Ответы [ 5 ]

3 голосов
/ 10 августа 2010

Использовать парсер. К счастью, у PHP есть один!

$html = '<div class="detailsGray"><span class="detailEmail"><a href="http://example.com" class="fontLink">examples@mail.com</a></span></div>';
echo retrieve_node_text($html, "//a[@class='fontLink']");

// -----------------------------------------------
function retrieve_node_text($html_fragment, $xpath) {
  $fragment = new DOMDocument();
  $fragment->loadHTML($html_fragment);

  if ($fragment) {
    $xp = new DOMXPath($fragment);
    $result = $xp->query($xpath);

    if ($result->length == 1) {
      return $result->item(0)->textContent;
    }
  }
  return FALSE;
}

возвращается:

examples@mail.com
2 голосов
/ 10 августа 2010

Глядя на регулярное выражение, это немного беспорядок:

'/class=\"fontLink\">.*?<\/a>/'

Насколько я знаю, в регулярном выражении нет ничего особенного в <>.

Вы не хотите .*, поскольку это пойдет прямо к концу строки, а затем начнет работать в обратном направлении..*? примет следующий символ, если не совпадает до </a>.

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

Я думаю, что ваш подход был достаточно хорош. Это мое решение:

preg_match('/class=\"fontLink"\>(.*)\<\/a\>/', $raw, $matches);
$parsedEmail = $matches[1];

Просто добавьте круглые скобки в части, которые вы хотите, чтобы они могли быть сопоставлены в одиночку. Если вы хотите сопоставить только одну проблему, используйте preg_match () вместо preg_match_all ().

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

Вам нужен позитивный взгляд вперед и назад, поэтому ваш паттерн будет выглядеть так:

(?<=class=\"fontLink\"\>).*(?=\<\/a\>)
0 голосов
/ 10 августа 2010

Каков ваш вклад? Если это необработанные данные из Интернета, регулярное выражение не является надежным способом сделать это. Было бы лучше загрузить ваш дом в виде дерева.

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