2015-02-09 95 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

相關問題