使用正则表达式来定位HREF属性

时间:2014-07-11 19:05:23

标签: php regex

我对正则表达式很新。

我想定位href=""中引号之间的所有内容,以便我可以快速解析html并替换链接引用的内容。

我还希望能够使用img src属性执行此操作,但如果有人可以使用href解释如何执行此操作,我将能够执行其他属性同样的方式。

如果我有这个标记:

<a href="http://my.domain/simple-product-2.html" class="product-image"><img src="http://my.domain/media/catalog/product/cache/1/small_image/75x/9df78eab33525d08d6e5fb8d27136e95/images/catalog/product/placeholder/small_image.jpg" width="75" height="75" alt="Simple Product 2" title="Simple Product 2"></a>
<div class="product-details">
    <h3 class="product-name"><a href="http://my.domain/simple-product-2.html">Simple Product 2</a></h3>
    <div class="price-box">
        <span class="regular-price" id="product-price-2-related">
        <span class="price">$42.00</span>                                    </span>
    </div>
    <p><a href="http://my.domain/wishlist/index/add/product/2/form_key/PLOSE4N7mH4kcOgX/" class="link-wishlist">Add to Wishlist</a></p>
</div>

如何使用正则表达式来定位""之间的href之间的任何值?

编辑:预期输出为例:

鉴于此输入

href="http://my.domain/simple-product-2.html"

检索此输出:

href="http://index.html"

2 个答案:

答案 0 :(得分:4)

不要使用正则表达式来解析HTML 。使用DOM parser in PHP

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML( $html ); // loads your html

$nodelist = $doc->getElementsByTagName('a'); // get all the <a> tags
for($i=0; $i < $nodelist->length; $i++) {
    $node = $nodelist->item($i);
    $val = $node->attributes->getNamedItem('href')->nodeValue;
    echo "href is: $val\n";
}

答案 1 :(得分:1)

  

我希望将目标锁定在href =“”

中的引号之间

根据以下评论中@lcoderre的建议,使用possessive quantifiers从索引1获取匹配的组。

href="([^"]*+)"

这是online demo


使用Positive Lookbehind & Lookahead

尝试这个
(?<=href=").*?(?=")

Online demo


带有第一个正则表达式模式的示例代码:

$re = "/href=\\"([^\\"]*+)\\"/m";
$str = ...

preg_match_all($re, $str, $matches);