2017-05-30 11 views
1

REGEXを使用してテキスト内にbbcodesを識別しようとしています。タグの最後の出現から正規表現を開始

Lorem ipsum dolor sit amet, [color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color] minim veniam. 

そして現在、私はこのパターン使用しています:

/\[([a-z0-9]+).+?\[\/\1\]/i 

をしかし、それは、このキャッチ:これに代えて

[color] consectetur adipisicing el it labore et [color=red]dolore magna aliqua[/color] 

を:

私は、次のテキストを持っている

[color=red]dolore magna aliqua[/color] 

私は2つの解決策を考えていますが、私はそれを動作させる方法がわからない:

  1. は、タグ・コンテンツ内のタグを許可していません。次に、[b]this [b] won't be allowed[/b]
  2. 最後のタグ発生からパターンを開始します。助けるため

おかげで、

JG

答えて

1

あなたの正規表現はBBtag続い[の左端の発生を発見し、その後、.+?マッチ任意の1+できるだけ少ないように改行以外の文字が、左端の数字を見つけるために必要な数だけ[/<CLOSE_TAG>]

あなたがクローズ1に向かう途中で開始タグと一致しないことを確認する必要があります。

\[([a-z0-9]+)[^\[]*(?:\[(?!\1\b)[^\[]*)*?\[\/\1\] 

は、それはほとんど少しあるかもしれないこと\[([a-z0-9]+)(?:(?!\[\1\b).)+?\[\/\1\]と同じであるregex demo

を参照してください。より読みやすいものの、あまり効率的ではありません。

詳細

  • \[ - オープンブラケット
  • ([a-z0-9]+) - グループ1(タグ名):1+英数字記号
  • [^\[]*から[
  • 以外ゼロ以上の文字(?:\[(?!\1\b)[^\[]*)*? - 0+シーケンス(できるだけ少ない)マッチング
      \[(?!\1\b)
    • - [
    • [^\[]*単語全体として、グループ1のテキストと続かない - [
  • \[以外ゼロ以上の文字を - [
  • \/ - /
  • \1 - グループ1テキスト
  • \] - a ]
+1

WOW!どうもありがとう!それは完璧に働いた!私はそれが動作していない場合を見つけることを試みていたが、誰も見つけることができなかった:-)恐ろしい!ありがとう! –

関連する問題