2010-12-15 13 views
0

正規表現(.NET)で文字列を解析し、[[で始まり、]]で終わるすべてのカスタムトークンを検索しようとしています。私の最初の試みは\[\[(.*)\]\]でした。これは、文字列内にトークンが1つしかない場合に機能するように見えました。しかし、複数ある場合は、最初の[[から最後の1つの結果を最後の]]に返します。サブ文字列を除外する正規表現

私は、一致する文字から]]を除外することを考えていましたが、それを実現する方法をまだ見つけていません。私は除外セット(?! \]\])を使って試してみましたが、別の構文で遊んでいましたが、実際に動作するものは見つかりませんでした。

誰でも簡単にこれを行う方法を知っていますか?

答えて

2

正規表現はデフォルトで欲張りです。つまり、できるだけ多くの文字を消費します。これを避けるには、 "?" 「。*」の後に、つまり\[\[(.*?)\]\]を試してください。

+0

パーフェクト。正確に私が必要としたもの。私はそれをあまり使わないので、正規表現の貪欲な概念を忘れてしまった。 – jwynveen

+0

もちろん、角かっこをエスケープする必要があります。 OPはしましたが、コードの書式を追加するまで表示されませんでした。 –

+0

@アラン・ムーア:ありがとう、私はOPと一緒に行ってみました。私はそれに応じてこの答えを編集しました。 – sjngm

0

さらに簡単ですが、.*?を使用してみてください(最後の?は、一致していないことを意味します。つまり、情報をキャッチするときに最小値を取得します)。

参考のため、this site on regexを参照してください。それはあなたに貪欲対ungreedyの詳細を与えるでしょう。

+0

'。*?'は常に何も一致しません。私はそれがそれよりずっと簡単ではないと思う。 :P –

+0

Hehは、元の正規表現のより多くの部分でしたが、指摘されています。 ;-) –

0

。*は「欲張りな」一致であり、最後の括弧に一致します。

*?可能な限りリピートを少なくする最初の一致を指定します(遅延*に相当)