2015-02-09 64 views
0

我特林让与的preg_match 2串之间的串获取在PHP 2串/标签之间的字符串

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

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

我要链接,“数据解析度=”是变化的,因此一个:

我在做这样的事情:

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')); 

我认为这个问题是不知道我该如何代表空格或特殊字符,我也想对最新最好的功能来解决这个

+0

你只想''链接,有一个'数据res'属性?或者你想要所有的人? – 2015-02-09 19:57:40

+0

我想要具有“data-res ='43543'”的“源代码”链接,它只是一个单独的匹配 – Ricardo 2015-02-09 20:02:10

回答

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; 
} 

This question也可以帮助,如果你有兴趣source标签与data-res属性。

+0

我真的想要一个更简单的通用解决方案来抓取2个随机字符串之间的任何内容我认为“trim(cut_str) “是我发现的最简单的函数,我认为字符串中的一些撇号或其他字符会混淆代码,我不确定 – Ricardo 2015-02-09 20:16:19

+0

如果您想使它成为* universal *,可以编写一个自定义函数来包装它, ,但用DOMDocument解析HTML是一种更好的方式。 – 2015-02-09 20:27:02

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'); 
} 

警告:我没有对此进行测试代码,但它应该工作。

+0

让它工作,谢谢,但事情是我想要“src =”具有data-res ='43543',我将“data-res”替换为“src”,但当然我得到了第一个随机数因为字符串中有很多 – Ricardo 2015-02-09 20:49:10

+0

@Ricardo我编辑了我的代码。 – 2015-02-09 20:54:32

+0

好的,谢谢,但仍然缺少一点,我想要具有data-res ='43543'且位于相同的标签 – Ricardo 2015-02-09 21:04:53

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]; 
+0

最好添加一个关于什么是错的描述,以及你有什么“改变” – Wain 2015-02-09 20:40:19

相关问题