0

ラップされたテキストが[quote][/quote]あり、それらのタグの前のすべてのテキスト、それらのタグの間のすべて、およびそれらのタグの後のすべてのテキストを一致させようとしています。問題は、それらが複数発生する可能性がありますが、相互に発生しないことです。

これを行う理由は、複数の出現があるかどうかに関係なく、これらのタグの外側のすべてのテキストに対してフィルターを実行したいからです。

これは私が取り組み始めているものです:

preg_match_all("/(^.*)\[quote\](.*?)\[\/quote\](.*)/si", $reply['msg'], $getthequotes);

出力は次のとおりです。

Array
(
[0] => Array
    (
        [0] => putting some stuff before the quote
[quote][b]Logan said[/b][br]testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

yep

http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA

adding a quote

[quote][b]Logan said[/b][br]This is the start of the second quote http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

[i]04/07/12 20:18:07: Edited by Logan(2)[/i]
    )

[1] => Array
    (
        [0] => putting some stuff before the quote

[quote][b]Logan said[/b][br]testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

yep

http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA

adding a quote


    )

[2] => Array
    (
        [0] => [b]Logan said[/b][br]This is the start of the second quote http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i]
    )

[3] => Array
    (
        [0] => 

[i]04/07/12 20:18:07: Edited by Logan(2)[/i]
    )

)

ご覧のとおり、目的の出力が得られていません。どんな助けでも大歓迎です。

4

2 に答える 2

1

私はこれを試したことはありませんが、 の前後のものだけが必要[quote][/quote]場合は、開始引用タグの最初の出現に対して strpos を実行できます。これで、以前のすべてが引用されていないことがわかりました。

次に、最初に一致した引用タグのインデックスから始まる strpos を使用して、終了引用タグを見つけることができます。このようなものは破棄できます。

ここで、見つけたばかりの終了引用タグの開始位置を使用して、次の引用ブロックに対して別の strpos を実行します。これを最後まで繰り返すことができます。

于 2012-04-08T02:37:45.373 に答える
0

実行できますが、文字列に複数のパスを作成する必要があります。

$string = 'putting some stuff before the quote
[quote][b]Logan said[/b][br]testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

yep

http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA

adding a quote

[quote][b]Logan said[/b][br]This is the start of the second quote http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

[i]04/07/12 20:18:07: Edited by Logan(2)[/i]putting some stuff before the quote

[quote][b]Logan said[/b][br]testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA[br][br]did it work?[br][br][i]04/04/12 23:48:46: Edited by Logan(2)[/i][br][br][i]04/04/12 23:55:44: Edited by Logan(2)[/i][/quote]

yep

http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA

adding a quote';

//get rid of whitespace
$string = preg_replace('%\s\s?%', " ",$string);
//break the string on a common element
$pieces =  preg_split('%\[%',$string);
//now discard the elements that are tags
foreach($pieces as $key=>$value):
    $value = trim($value);
    if(strrpos($value,"]") == (strlen($value) -1)):
        unset($pieces[$key]);
    endif;
endforeach;
print_r($pieces);
//and finally strip out the tag fragments
foreach($pieces as $key=>$value):
    $pieces[$key] = preg_replace('%.*]%',"",$value);
endforeach;

結果は次のような配列になります。

Array
(
    [0] => putting some stuff before the quote 
    [2] => Logan said
    [4] => testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA
    [6] => did it work?
    [9] => 04/04/12 23:48:46: Edited by Logan(2)
    [13] => 04/04/12 23:55:44: Edited by Logan(2)
    [15] =>  yep http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA adding a quote 
    [17] => Logan said
    [19] => This is the start of the second quote http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA
    [21] => did it work?
    [24] => 04/04/12 23:48:46: Edited by Logan(2)
    [28] => 04/04/12 23:55:44: Edited by Logan(2)
    [31] => 04/07/12 20:18:07: Edited by Logan(2)
    [32] => putting some stuff before the quote 
    [34] => Logan said
    [36] => testing this youtube link http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA
    [38] => did it work?
    [41] => 04/04/12 23:48:46: Edited by Logan(2)
    [45] => 04/04/12 23:55:44: Edited by Logan(2)
    [47] =>  yep http://www.youtube.com/watch?v=8UVNT4wvIGY&feature=g-music&context=G2db8219YMAAAAAAAAAA adding a quote
)
于 2012-04-08T03:45:37.257 に答える