2011-11-13 58 views
1

我有以下的圖案和主題的preg_match似乎總是返回0匹配

$pattern = "\[item\s*id=['\"](.*?)['\"]\s*\]"; 
$subject = "[item id=\"40\"]"; 

基本上,我想從一個字符串[項目ID =「30」]

我的id屬性已經在不同的preg_match/preg_match_all網站上測試了我的模式和主題,並且他們都返回了正確的匹配。

但是,我寫的下面的代碼似乎始終爲匹配返回NULL。

preg_match_all($pattern, $subject, $matches); 
var_dump($matches); 

我不能,爲了上帝的愛,弄清楚什麼是錯的!請有人可以指導我如何做到這一點?由於

回答

2

你錯過分隔符

Warning: preg_match_all(): Delimiter must not be alphanumeric or backslash in /data/1.php on line 4 NULL 

所以$pattern應該像

$pattern = "~\[item\s*id=['\"](.*?)['\"]\s*\]~"; 

回報

array(2) { [0]=> array(1) { [0]=> string(14) "[item id="40"]" } [1]=> array(1) { [0]=> string(2) "40" } } 
+0

omg非常感謝,我學到了一些新東西! –

1

嘗試,而這一點:

$pattern = '/\[item\s+id=[\'"](.*)[\'"]\s*\]/'; 

例如:

<?php 
$pattern = '/\[item\s+id=[\'"](.*)[\'"]\s*\]/'; 
$subject = "[item id=\"40\"]"; 
preg_match_all($pattern, $subject, $matches); 
echo $matches[1][0]; # => 40 
?> 

你必須使用適當的分隔符(/…/)和\s+應適當多比\s*所以它並不像[itemid="2"]匹配的東西。

+0

感謝這項工作呢! –

+0

@CurryIng這應該是我想的最好的答案,因爲在正確的語法中'item'&'id'之間的空格數量不應該等於none。 – user544262772

2

請確保您使用正確的delimiters。另外,this site在調試中非常有幫助。

+0

感謝您的精彩資源! –

+0

不客氣!讓我知道你是否需要更多的幫助。 – Shomz