2013-03-21 23 views
0

替換字符串我有一個這樣的字符串:如何找到字符串中的特定標籤,從它那裏得到的值,然後用PHP

$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text 
      some text <div class"myClass" path="myPath_2">some content</div> some text...'; 

我需要的屬性路徑的價值所有事件:

$path = array('myPath_1','myPath_2'); 

一旦我有這個,我不得不更換整個DIV:用圖像標籤

<div class"myClass" path="myPath_1">some content</div> 

<img src="myPath_1"> 

我該怎麼辦?

+0

你可以使用DOM來解析它,它遍歷和它代替的東西。但它要求html幾乎無懈可擊地通過PHP dom解釋器的解析過程。 – ITroubs 2013-03-21 16:40:52

+0

你的div是否包含全部相同的類,並且只有路徑被更改? – 2013-03-21 16:45:20

+0

是的,路徑屬性是唯一改變的 – matt 2013-03-21 16:46:25

回答

0
<?php 
$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text 
      some text <div class"myClass" path="myPath_2">some content</div> some text...'; 
$matches = array(); 
$matches = preg_match_all('/path="([a-zA-Z0-9_]+)"/', $string, $matches, PREG_SET_ORDER); 
$paths = array_map(function($m){ 
    return $m[0]; 
}, $matches); 
var_dump($paths); 
// array("myPath_1", "myPath_2") 
?> 

這裏我使用正則表達式串path="([a-zA-Z0-9_]+)"連同PHP的preg_match_all function,這應該與你的路。 path,但是不是一個有效的html屬性,我不知道你是否知道。考慮將其更改爲data-path

我知道你問的是如何替換你的div標籤,但是你的當前html格式不正確。 <div class"myClass"應改爲<div class="myClass"。但是,你應該能夠做這樣的事情:

<?php 
$string = 'some text <div class"myClass" path="myPath_1">some content</div> some text 
      some text <div class"myClass" path="myPath_2">some content</div> some text...'; 
$new_string = preg_replace('<div class=?"myClass" path="([a-zA-Z0-9_]+)">[a-zA-Z0-9 ]+</div>','<img src="$1">'); 
?> 
0

你可以用正則表達式的嘗試:

$pattern = '/<div([a-zA-Z0-9 ="]+)path="([^"]+)">([^<]+)<\/div>/'; 
echo preg_replace($pattern, '<img src="$2" />', $string); 
相關問題