在php中获取2个字符串/标签之间的字符串

时间:2015-02-09 19:54:08

标签: php string

我想通过preg_match

获取两个字符串之间的字符串

字符串是这样的,这只是一个例子

<source src='http://website.com/384238/dsjfjsd.jpg' type='image/jpg' data-res='43543' lang='English'/>

我想要链接,&#34; data-res =&#34;是这样的:

我做这样的事情:

preg_match("<source src='(.*)' type='image/jpg' data-res='43543",$input,$output);

我也试过这种方式

$output = trim(cut_str($input, '<source src='', ' type='image/jpg' data-res='43543'));

我认为问题是我不知道如何表示空格或特殊字符,我也想要一个建议,以解决这个问题的最佳功能

3 个答案:

答案 0 :(得分:1)

虽然您可以使用正则表达式执行此操作。我鼓励你使用DOMDocument

从那里使用getElementByTagName()抓取所有源代码标签很简单:

$dom = new DOMDocument;
$dom->loadHTML($html);
$source_tags = $dom->getElementsByTagName('source');
foreach ($source_tags as $source_tag) {
    echo 'Link: ' . $source_tag->attributes->getNamedItem('src')->nodeValue;
}
如果您对source属性的data-res代码感兴趣,

This question也可能会有所帮助。

答案 1 :(得分:0)

为什么不这样解析呢?它比REGEX更快,更容易使用。

$dom = new DOMDocument;
$dom->loadHTML('<source src="http://website.com/384238/dsjfjsd.jpg" type="image/jpg" data-res="43543" lang="English" />');

//  We read it
$dataSource = $dom->getElementsByTagName('source');

//  We loop on it
$dataRes = FALSE;
foreach($dataSource as $data){
    #   We read the wanted field
    if(($dataAttr = $data->attributes->getNamedItem('data-res')->nodeValue) == "43543"){
        #   We assign it
        $dataRes&= $dataAttr;

        #   Done - We end the loop here
        break;
    }
}

#   We found it ?
if($dataRes !== FALSE){
    #   Yes
    var_dump($dataRes);
} else {
    #   No
    exit('Failed');
}

警告:我没有测试此代码,但它应该有效。

答案 2 :(得分:0)

以下是您可以尝试的代码:

// The Regular Expression filter
$reg_exSRC = "/(src)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

// The text you want to filter for urls
$text = "<source src='http://website.com/384238/dsjfjsd.jpg' type='image/jpg' data-res='43543' lang='English'/>";

// apply expression to the text
preg_match($reg_exSRC, $text, $url);

echo $url[0];