0

配列のようなテキストを正規表現で解析し、一致グループを取得する必要があります。解析したいテキストの一例は次のとおりです。

['red','green', 'blue']

それらを抽出したいので、一致グループを使用したい。この正規表現を使用していますが、それによって見つかったグループは、期待したものとは異なります。

\[ *('.+?')( *, *('.+?'))* *\]

アイデアは、次の順序で解析することです。

  • 角括弧
  • 任意の数のスペース
  • 次のグループ:
    • 一重引用符
    • 任意の文字
    • 一重引用符
  • 以下の 0 個以上のグループ:
    • 任意の数のスペース
    • コンマ
    • 任意の数のスペース
    • とのグループ
      • 一重引用符
      • 任意の文字
      • 一重引用符
  • 任意の数のスペース
  • 角括弧

そして、解析された配列要素ごとに 1 つのグループを取得します。

手伝って頂けますか?

ヒント: regexp をテストする簡単な方法は、サイトhttp://rubular.comです。

4

3 に答える 3

2

これは全体主義的な答えにはなりませんが、「*」を実行しても空白をチェックできないことは確かです。少なくとも、使用している言語に依存する可能性があります。

空白をチェックするための言語要件の一部を示す C# 正規表現の例を次に示します: regex check for white space in middle of string

編集:Ruby を言語として追加したようですが、残念ながら私は Ruby に詳しいわけではないので、詳細についてはお答えできません。申し訳ありません。

Edit2: 正規表現ステートメントをデバッグするために Ruby に自分自身を強制しているのを見て、言語に依存しないようにしようとするhttp://www.debuggex.com/をお勧めしますか?

于 2013-04-19T13:37:19.833 に答える
0

任意の数のグループを 1 つの正規表現に一致させることができます。

^\[\s*|(?:\G'([^']+)'\s*(?:,\s*|]$))+

またはこのように(よりパフォーマンスが高いはずです):

^\[\s*+|(?>\G'([^']++)'\s*+(?>,\s*+|]$))++

これは前に尋ねたようにルビーで機能しますが、デルファイではわかりません。

于 2013-04-19T14:09:48.443 に答える