1

私はこのタイプのサブトリングを持っています

string 1
{
    string 2
    string 3
    {
        string 4
        string 5
    }
    string 6
    {
        string 7
        string 8
    }
    string 9
    {
        string 10
        string 11
        string 12
        {
            string 13
            string 14
        }
        string 15
    }
}
string 16
string 17

基本的に私はJavaクラスタイプの構造
を持っていて、サブストリング(SS#)
SS1をフォローできるコードが必要です。

        string 4
        string 5

SS2:

        string 7
        string 8

SS3:

            string 13
            string 14

SS4:

string 16
string 17

SS5:

        string 10
        string 11
        string 12
        {
            string 13
            string 14
        }
        string 15

SS6:

    string 2
    string 3
    {
        string 4
        string 5
    }
    string 6
    {
        string 7
        string 8
    }
    string 9
    {
        string 10
        string 11
        string 12
        {
            string 13
            string 14
        }
        string 15
    }

だから基本的に私は文字列(javaクラス)のさまざまな部分(関数、クラス、しかしループではない)を異なるサブ文字列に入れることができるコードが欲しいです...
私はこの正規表現を読ん
で中括弧の間の文字列を取得します"{私は欲しい中括弧の間にあるもの}"
ですが、最初の後に続く' {'をカウントせずに、'{'と'}'のペアの間のデータのみを取得します。
私は完全なコードではありませんが、どのように進めるかについてのいくつかの方向性がありますか?

4

4 に答える 4

2

これはRegExを使用して完全に行われるわけではありませんが、そのためにスタックを使用することをお勧めします。

ただし、必要なのはRegExソリューションのみであり、機能する可能性があります(常にではありません)。

(?is)\{[^}]*?\}(?=.*?\})

説明

<!--

    (?is)\{[^}]*?\}(?=.*?\})

    Match the remainder of the regex with the options: case insensitive (i); dot matches newline (s) «(?is)»
    Match the character “{” literally «\{»
    Match any character that is NOT a “}” «[^}]*?»
       Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
    Match the character “}” literally «\}»
    Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=.*?\})»
       Match any single character «.*?»
          Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
       Match the character “}” literally «\}»
    -->
于 2012-09-13T04:50:37.140 に答える
0

私はこれの正規表現を知りませんが、これについて提案できる別の解決策があります:私はsudoコードを書いているだけです:

  1. 指定された入力文字列の文字をスキャンします
  2. charが{の場合、charの位置をスタックにプッシュします。
  3. それ以外の場合、charが}スタックからのポップ位置であり、substring(poped_postion、current_position)をSS#
  4. goto 1(文字列に文字が残るまで次の文字をスキャンします)
于 2012-09-13T04:49:28.853 に答える
0

正規表現でこれを行うのは非常に困難です。この構造を新しい行で分割し、いくつかの簡単なルールを使用してHashMap-sのデータ構造を作成することをお勧めします。文字列2がキーになりますが、値はありません。String3が次のキーになり、その値は、{で始まる行で始まり、}で始まる行で終わる下の中括弧内のものになります。

于 2012-09-13T04:50:55.013 に答える
-1

の一致のためにこの正規表現を試してください{string}

\{(.*)\}
于 2012-09-13T04:47:25.953 に答える