我正在字符串中使用preg_match 获取2个字符串之间的字符串
字符串是这样的,这只是的一个例子
<source src='http://website.com/384238/dsjfjsd.jpg' type='image/jpg' data-res='43543' lang='English'/>
我想要链接,"数据res="是一个变化,所以:
我正在做这样的事情:
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'));
我认为问题是不知道如何表示空间或特殊字符,我还想知道解决这个的最佳函数是什么。
虽然您可以使用正则表达式来实现这一点。我鼓励您使用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;
}
如果您对具有data-res
属性的source
标记感兴趣,这个问题可能也会有所帮助。
以下是您可以尝试的代码:
// 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];
为什么不这样解析它?它比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');
}
警告:我没有测试这个代码,但它应该可以工作