2017-12-31 79 views
0

私はBBCode QUOTEタグからユーザー名と投稿IDをキャプチャするいくつかの正規表現を作成しようとしています。RegExキャプチャBBCodeユーザー名とIDを

私は唯一のユーザ名を直接ポストIDが続き、完全に形成されたQUOTEタグ(例えばあるされたときにテキストを一致させたい[QUOTE =ユーザ名; numericalid]

私は現在、この使用しています:

$matches = preg_match_all('/(\[QUOTE=)(\w*?)(\;)/', $data, $match); 

しかし、これは「QUOTEは=ジム] [QUOTE =ボブ」の下のテキストから、だけではなく、「[QUOTE =ボブ」とのマッチングされる。

私はまた、唯一のユーザ名とIDを返すようにしようとしています理想的な結果は "Bob; 20499344"(テキストのすべてのユーザー名/ IDパターンについて)です。

[QUOTE=Bob;204992][QUOTE=Steve;204939][QUOTE=Steve;204938][QUOTE=Steve;204936]Here is some text. 

[QUOTE=Jim][QUOTE=Bob;20499344][QUOTE=Bob;203489194][QUOTE=Bob;67235994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=Bob;204194] 

=hello;78967876] 

これに正しく一致するように正規表現を変更するにはどうすればよいですか?

何か助けが素晴らしいだろう!ありがとう!

答えて

2

あなたは、次の正規表現を使用して、あなたの「理想的なリターン」を取得するために、グループ#1で作業することができます

\[QUOTE=([\w ]+;\d+) 

[\w ]+は、単語文字とスペースからなる(ユーザ名を検索します。あなたがする必要があるかもしれません実際の制限に変更してください)、\d+は少なくとも1桁を探します。

Small sample code

<?php 
$string = "[QUOTE=jim][QUOTE=bob;20499344][QUOTE=bob;203449194][QUOTE=bob;67204994]some more quote here[/QUOTE][/QUOTE][/QUOTE][/QUOTE][/QUOTE][QUOTE=bob;204994]"; 
$matches = preg_match_all('/\[QUOTE=([\w ]+;\d+)/', $string, $match); 
print_r($match[1]); 
?> 

出力:

Array 
(
    [0] => bob;20499344 
    [1] => bob;203449194 
    [2] => bob;67204994 
    [3] => bob;204994 
) 
+0

おかげで - の例では、実際に私の以前の試みの一つであったということ。私はそれが私をそこそこにしていたユーザー名のスペースであることに気づいた。あなたの修正は完全に動作します。 – Will

関連する問題