2016-08-31 2 views
1

私はさまざまな組み合わせを試しましたが、正しい正規表現パターンを見つけ出すには不向きでした。連鎖関数の正規表現パターンは何でしょうか?

基本的に、私は以下の例のようなパターンをキャプチャする:

  1. {{変数}}
  2. {{variable.function1 {PARAM1}}}
  3. {{variable.function1 {PARAM1 } .function2 {PARAM2}}}

など..

私ははfunction1、PARAM1、機能2、PARAM2この

からこれまでのところ、私は例3上のパターンの上に適用しようとすると、完全に

\{\{([^{}.]+)(\.([^{}]+)\{([^{}]+)\})*\}\} 

動作しない正規表現の下に持って、変数をキャプチャしたかったです可変

  • グループ#2 - - .function2 {PARAM2}
  • 、私はグループ

    • グループ#1の下に入手します機能2
    • グループ#4 - - PARAM2

    Iは以下のように気にいらを期待し、

    • グループ#1から
    • グループ#3変数
    • グループ#2 - .function1 {param1}
    • グループ#3 - function1
    • グループ#4 - param1
    • グループ#5 - .function2 {PARAM2}
    • グループ#6 - 機能2
    • グループ#7 - PARAM2

    PS:あなたはhttp://regexr.com/3e4st

    +1

    代わりにhttps://regex101.com/を使用することをお勧めします。なぜなら、実際にあなたが思ったことをしていない理由を説明しているからです(第2部分の角括弧も必要です。 \ {([^ {})+)\})*} '' vs ' * ' ) 実際の回答については、それはまだ正しくないので、私は見てみましょうが、約束はありません! –

    +0

    ありがとう@Alauが見つかったら教えてください。 – Amit

    答えて

    1

    オーケーで、コードを記述せずに確認することができますあなたのことがうまくいかない理由は、基本的には一般的に1つのインスタンスしかキャプチャしていないからです。つまり、各キャプチャグループは、必要なインスタンスを1つだけ返すことができます。だから、あなたが使用している言語であれば、グローバル変数または同等のものが必要です。

    例:正規表現一致におけるグループの数が固定されhttps://regex101.com/r/pO8xN2/3

    +0

    ありがとう、私は各インスタンスとiteratingとしてチェーンをキャプチャするこのアプローチに行った – Amit

    1

    。詳しくはolder post of mineをご覧ください。あなたのケースでは、その数は4です。

    グループが繰り返し一致する場合、通常はは、文字列内の最後のオカレンスの値にしかアクセスできません。それはあなたの問題で見られるものです:function2param2

    一部の正規表現エンジンでは、以前のグループキャプチャにアクセスできます(たとえば、the one in .NET)。大多数はそうしない。問題を簡単に解決できるかどうかは厳密には正規表現エンジンに依存します。

    +0

    あなたは正しいです!私は一度にすべてのグループキャプチャを行うことはできません。しかし、A. Lauの答えは私の問題解決のためのより多くの洞察を与えてくれたので、私はその答えを受け入れるでしょう。ご回答ありがとうTomalak。 – Amit

    関連する問題