1

iPhone アプリケーションで使用する正規表現のヘルプを探しています。

私はNSRegularExpressionを使用しています。

NSString *string = @"[quote author=iffets12345 link=topic=36426.msg388088#msg388088 date=1294820175][quote author=fuzzylogic link=topic=36426.msg387976#msg387976 date=1294802623]Although it wouldn't come up too often in an English essay: MUM not mom!!!![/quote]Haha, EXACTLY![/quote]";

フォーラム投稿用の BBCode であるこの文字列があります。この場合、引用の中に引用があります。

NSRegularExpression *quoteRegex = [NSRegularExpression regularExpressionWithPattern:@"\\[quote author=(.*?) .*?\\](.*?)\\[\\/quote\\]"
                                                                            options:NSRegularExpressionCaseInsensitive
                                                                              error:&error];

そして、それは私がそれを解析するために使用している正規表現です。

ネストされた引用符のない通常の BBCode で正常に動作します。しかし、引用符がネストされている場合、この正規表現は私が望むようには機能しません。

この特定の文字列に対して正規表現を実行すると、次のようなものが返されます。

"[quote author=iffets12345 link=topic=36426.msg388088#msg388088 date=1294820175][quote author=fuzzylogic link=topic=36426.msg387976#msg387976 date=1294802623]Although it wouldn't come up too often in an English essay: MUM not mom!!!![/quote]

引用符の開始タグと終了タグが正しく一致していません。

誰かが私が見逃しているものを見ることができますか? ありがとう。

4

2 に答える 2

1

私はあなたのためにこの正規表現をしました: DEMO

(
   \[quote\s+author=([^\[\]]*)
          \s+link  =([^\[\]]*)
          \s+date  =([^\[\]]*)\]  #The [quote author=4543] part
   (?>
       (?<text>[^\[\]]+)          #Here is where I ask for text or another quote inside it
       |
       (?<quote>(?1))             #I say that there can be another quote 
                                  #inside a quote (you just will be able 
                                  #to backreference the author of the first one
   )*
   \[\/quote\]                    #End of the quote text
)

これがあなたが必要とするものかどうかはわかりませんが、そうであることを願っています。

于 2013-01-09T12:27:33.653 に答える
0

最初と最後の両方で正規表現を固定する必要があります。試す:

@"^\\[quote author=(.*?) .*?\\](.*?)\\[\\/quote\\]$"
于 2013-01-09T11:52:13.540 に答える