PHP在两个分隔符之间获取字符串

时间:2013-11-21 23:09:17

标签: php html regex string parsing

我试图从以下字符串中获取href值:

<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere" class="bigger">random1</a><br/>
<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere2" class="bigger">random2</a><br/>

在这种情况下,我应该得到“/ path / to / somewhere”和“/ path / to / somewhere2”

我尝试执行以下操作,但我只是得到空字符串。

$htmlc = str_replace(' ', '', $htmlc);
//$htmlc contains the string I am parsing with the spaces removed
preg_match_all('/width=\"300\"class=\"topborder\"><ahref=\"([^\"class=\"bigger\"]+)/', $htmlc, $hrefvals);

$ hrefvals此时包含空字符串。我在preg_match_all中做错了什么?

4 个答案:

答案 0 :(得分:4)

您需要的只是DOM和XPath。正则表达式不是为HTML解析而设计的。

<?php
$html = <<<HTML
<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere" class="bigger">random1</a><br/>
<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere2" class="bigger">random2</a><br/>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
// replace with @$dom->loadHTMLFile('http://...') with you want to parse an URL
$xpath = new DOMXPath($dom);
$links = array_map(function ($node) {
        return $node->getAttribute('href');
    }, iterator_to_array($xpath->query("//td[@class='topborder']/a[@class='bigger']")));
var_dump($links);

这给了我以下内容:

array(2) {
  [0]=>
  string(18) "/path/to/somewhere"
  [1]=>
  string(19) "/path/to/somewhere2"
}

答案 1 :(得分:1)

尝试这样的模式

/width=\"300\"class=\"topborder\"><ahref=\"(.*?)"/

"(.*?)"将匹配任何字符,但是“懒惰”。这意味着一旦它找到组后的第一个"(在这种情况下:href标记的结尾),该组将结束

demo

答案 2 :(得分:0)

或者您可以尝试:

$htmlc = '
<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere" class="bigger">random1</a><br/>
<td valign="top" width="300"class="topborder"><a href="/path/to/somewhere2" class="bigger">random2</a><br/>
';

preg_match_all('~(?<=<a\shref=")[^"]*~', $htmlc, $hrefvals);
var_dump($hrefvals);

答案 3 :(得分:-3)

<script>
$(document).ready(function(){
  $("button").click(function(){
    alert($("#blah").attr("href"));
  });
});
</script>

则...

<a href="http://www.blah.com" id="blah">Blah</a></p>
<button>Show href Value</button>

这是你的意思吗?