2017-10-05 20 views
0

は私が{^xyz^}怒鳴るようにマッチするパターン、正規表現とパターン{^と^}

@"\b\{\^\S*\^\}\b 

を記述しようとしています。しかし、私は成功を取得し、私のパターンに問題があるか疑問に思うわけではありません。

@"\{\^([^}]*)\^\}" 

をし、あなたの文字列をキャプチャし、グループ#1を抽出:

+0

文字列が{^ fristname ^}の場合は、{^と^}の間の文字列を取得したいからです。... 'firstname'を取得したいと思います。 – dula

+0

どのツールを使用して一致させていますか(理由は '\\'をエスケープする必要があります)?あなたのreのinfrontの見積もりがあります! – kaza

+0

申し訳ありませんが、私はあなたの返信に一重引用符を入れたfirstnameを強調したいと思います – dula

答えて

1

あなたは使用することができます。

  • キャプチャされたグループを使用して、より大きなマッチから抽出する部分文字列を取得します。
  • ワード境界または\bは、{および}が単語ではないため、ここでは機能しません。
  • ネゲートされた文字クラス[^}]*の使用は、グレディー\S*よりも効率的で正確です。
+0

可能な文字列かどうかはわかりませんが、あなたの正規表現は '{^ curly {brace} inside ^}。 'と一致しません。 – Andrew

+0

参照してください、私たちはいつでも正規表現で問題を引き起こす入力を発明することができますが、それはそれがOPごとの有効な入力かどうかです。 – anubhava

+0

問題は、その文字列に中括弧を入れないと仮定していますが、理由はわかりません。 ;) – Andrew

0

私は単に\{\^(\S*?)\^\}を使用します。この方法で、キャレットと中括弧の間の内容をキャプチャします。 ?は、*量子を怠惰にすることで、できるだけ小さな文字にマッチします(同じ行の別のブロックの終わりまで1つのブロックの先頭が一致するのを防ぐためです)。

これらの\bでは、一致する正規表現の中括弧の前後に単語タイプの文字が必要です。それは本当に必要条件ですか?それとも、スペースがありますか?