2011-11-21 44 views
0

我有這樣的XML內容:如何使用Perl兼容的正則表達式從PHP中的XML文本中刪除XML標記?

$XML = "<item xmlns='http://...'>Some value</item>"; 

我想提取關閉標籤的價值,所以我用下面的正則表達式:

$Value = preg_replace("/^<item [.]+>/","",$XML); 
$Value = preg_replace("/</item>$/","",$Value); 

但這些不工作,$值最後仍然是$ XML。如何解決這個問題?

+1

爲什麼不使用正確的XML解析器呢? –

+0

因爲我的xml內容只有一個標籤 – jondinham

+1

使用正則表達式來解析XML可能會導致意想不到的結果。例如,如果一個帶有「&」字符的字符串是該item元素的可能值,那麼「&」會以格式良好的XML轉義爲&,並且正則表達式不會擺脫該實體。 –

回答

2

如果你要提取的標籤中的文本,你可以使用此代碼:

$string = "<item xmlns='http://...'>Some value</item>"; 
$regex = '#<.*?>(.*?)</.*?>#'; 
preg_match_all($regex, $string, $matches); 
$matches = $matches[1][0]; 
echo $matches; 

如果你想使用的preg_replace,使用此代碼:

$Value = preg_replace("/^<item .+?>/","",$XML); 
$Value = preg_replace("/<\/item>$/","",$Value); 
+0

即時我誤解之間posix正則表達式和perl兼容的正則表達式? – jondinham

+0

但他們不一樣? – jondinham

+0

@PaulDinh這個正則表達式:<.*?>(。*?)與每種語言都兼容(如果需要,您必須用'\ /'來避開'/')。 –

相關問題