2011-06-29 52 views
3

簡單地說,我需要從文本中提取的一大塊花括號中的所有字符串,如PHP正則表達式,從文本中提取所有的自定義標籤

這裏是一個{標籤},但這裏{TAG_2}如好吧,然後再一次... {tag_3} ...在這裏,但周圍有一些垃圾。我想要一個標籤,tag_2和tag_3數組。 標籤只能包含單詞字符。

我嘗試這樣做:

$tags = array(); 
preg_match_all("/\{\w+\}/s", $data['text'], $tags); 

的標籤陣列,如果在文字上面的片段運行,返回空。

編輯:

我的滋擾大家道歉,原來我搞砸了以後。我通過$ tags而不是$ tags [0]捕獲標籤,因此我的合併數組總是空的。

+0

什麼不適合你的正則表達式?標籤名稱中缺少'_'? – hakre

+0

標籤數組返回爲空。 – Swader

+0

您是否嘗試過不脫離大括號?我不認爲他們需要逃脫。 – Spudley

回答

3

它工作正常:

<?php 
$text = 'Here is a {tag}, but here {tag_2} as well, and then again ...{tag_3}... here but with some trash around it.'; 
$tags = array(); 
preg_match_all("/\{\w+\}/s", $text, $tags); 
print_r($tags); 
?> 

生產:

Array 
(
    [0] => Array 
     (
      [0] => {tag} 
      [1] => {tag_2} 
      [2] => {tag_3} 
     ) 

) 

$data['text']可能是空的。使用Ideone進行測試。

+0

確實。文本並不是空的,但後來我搞砸了。運行array_unique(array_merge(/ *許多標籤數組在這裏* /))返回併爲空數組。謝謝!編輯主要問題來解釋我做錯了什麼。它有一天可能會幫助別人。 – Swader

+0

@Swader,沒問題。 –

0

也許,如果你錯過了(可選)強調在您正則表達式:

$tags = array(); 
preg_match_all("/\{[a-z]+(?:_[1-9][0-9]*)?\}/s", $data['text'], $tags); 

這是不符合你的正則表達式爲\w的情況下包含下劃線。留下以下評論的問題。

+1

我認爲下劃線是單詞字符,因此包含在w +中? – Swader

+0

@Swader,更正('\ w',不是'w +')。 –

+0

我明白了。謝謝,但巴特最終是正確的,正則表達式的作品,後來我把它搞砸了,同時結合了來自不同文本的多個標籤數組。 – Swader

相關問題