2016-11-26 4 views
1

私はユーザーがタグに言及するこの説明を持っています。複数のタグの間でテキストを取り込む方法は?

[MENTION = 1] one [/ MENTION] [MENTION = 4] two [/ MENTION] [MENTION = 748] 3つの[/について]

私はこの説明で言及されているメンバーが誰かを知る必要があるので、私は期待しています。私は数字の1,4,748を取得する必要がある場合はどう

[ 
    [0] => one[ 
    [1] => [ 
    [2] => two[ 
    [3] => [ 
    [4] => three[ 
    [5] => H 
] 

preg_match_all('/[MENTION=[1-9]](.*?)[\/MENTION]/s', $html, $matches); 
if($matches) print_r($matches[1]); 

出力:こちらを

['one','two','three'] 

は私が試みている何ですか?

+1

でそれらをエスケープする必要があります。例えば、 'MENTION =([1-9])' –

答えて

3

大括弧はRegExの予約文字です。あなたはそれらをエスケープする必要があります。この動作するはずのような何か:

preg_match_all('/\[MENTION=([1-9]+)\](.*?)\[\/MENTION\]/s', $html, $matches); 

私はまた、あなたが数値とあなたの試合でテキストコンテンツを取得して($matches[1]が数字と$matches[2]意志が含まれています、([1-9]+)、IDの周りキャプチャグループを追加しましたテキストコンテンツを含む)。あなたが[1-9]から知っているよう

2

(\d+)は、1つの以上の単語文字のための1つの以上の数字

(\w+)キャプチャグループのために

をグループに取り込み角括弧[]は、文字セットを表す正規表現での特殊文字であること。あなたは文字通り、それらのいずれかと一致する場合ので、あなたはそれらをキャプチャする[1-9]周りかっこを追加し、バックスラッシュ\[\]

<?php 

$html = '[MENTION=1]one[/MENTION][MENTION=4]two[/MENTION][MENTION=748]three[/MENTION] HI, it is me!!'; 

preg_match_all('/\[MENTION=(\d+)\](\w+)\[\/MENTION\]/s', $html, $matches); 

print_r($matches); 
Array 
(
    [0] => Array 
     (
      [0] => [MENTION=1]one[/MENTION] 
      [1] => [MENTION=4]two[/MENTION] 
      [2] => [MENTION=748]three[/MENTION] 
     ) 

    [1] => Array 
     (
      [0] => 1 
      [1] => 4 
      [2] => 748 
     ) 

    [2] => Array 
     (
      [0] => one 
      [1] => two 
      [2] => three 
     ) 

) 
関連する問題