2009-10-05 97 views
0

我需要在字符串中找到隨機字符串。獲取字符串中的隨機字符串

我的字符串看起來如下

{主題}粉{/主題}或{主題}紅{/主題}

我需要獲得標籤之間的文本,該文本可能以後每次不同刷新。

我的代碼如下

$str = '{theme}pink{/theme}'; 
preg_match('/{theme}*{\/theme}/',$str,$matches); 

但是這個沒有運氣。

+0

} *零次或多次匹配的梅開二度......你可能想嘗試像}。* { –

+0

試過了,和它返回{主題}粉色{/主題},我現在需要獲取粉紅色的值 – Roland

回答

0
$matches = array(); 
$str = '{theme}pink{/theme}'; 
preg_match('/{([^}]+)}([^{]+){\/([^}]+)}/', $str, $matches); 

var_dump($matches); 

這會轉儲出您可能正在尋找的所有「標籤」的所有匹配項。試試看,並看看$matches,你會明白我的意思。我假設你正在嘗試構建你自己的基本模板語言,所以這段代碼可能對你有用。如果你是,我可能會建議看像Smarty

在任何情況下,您都需要圓括號來捕獲正則表達式中的值。有上述三個捕獲的值:

([^}]+) 

將捕獲開口「標籤」,這是theme的值。該[^}]+的意思是「一個或多個任意字符,但}字符,這使得這個非貪婪默認。

([^{]+) 

將捕獲標籤之間的值。在這種情況下,我們要匹配所有的字符,但{字符。

([^}]+) 

將捕獲和關閉標籤的價值。

0
preg_match('/{theme}([^{]*){\/theme}/',$str,$matches); 

[^{]任何字符匹配除了左括號,使正則非貪婪,這是很重要的,如果你有每串超過一個標籤/線

3

*只量詞,你需要指定量詞的用途。你已經將它應用於},這意味着可以有0個或更多的'}'字符。你可能想要「任何角色」,用點表示。
也許你想只捕捉與{..}標籤之間的部分(。*)

$str = '{theme}pink{/theme}'; 
preg_match('/{theme}(.*){\/theme}/',$str,$matches); 
var_dump($matches);
2

'/{theme}(.*?){\/theme}/'或更嚴格'/{theme}(\w*){\/theme}/'應該做的工作

2
preg_match_all('/{theme}(.*?){\/theme}/', $str, $matches); 

您應該使用在這裏匹配不合格。 $matches[1]將包含所有匹配標籤的內容作爲數組。