2011-11-13 6 views
1

を返すように思わIする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); 

私は神の愛のために、何が間違っているのか理解できません!どうか、誰かが私にこれをどうやって行えるか教えてくれる?あなたは区切り文字

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

が欠落しているおかげで

答えて

2

ので$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

はなく、このお試しください:

を例えば

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

あなたは適切な区切り文字(/…/)を使用する必要があり、それは[itemid="2"]のようなものと一致していないので、\s+\s*よりも適切でなければなりません。

+0

ありがとうございます! –

+0

@CurryIng正しい構文では、 'item'と' id'の間のスペースの数はnoneにはならないので、これは私が推測する最良の答えです。 – user544262772

2

delimitersを必ず使用してください。また、this siteはデバッグに非常に役立ちます。

+0

素晴らしいリソースをありがとう! –

+0

あなたは大歓迎です!あなたがもっと助けが必要な場合は教えてください。 – Shomz

関連する問題