2

配列のように「見える」文字列に一致する正規表現を作成しようとしています。

  • [{またはで始まる必要があります(
  • ]、、、}またはで終わる必要があります)
  • 開始と終了が同じブラケットを使用するかどうかは関係ありません(たとえば、問題ありません(....}
  • アイテムはコンマで区切られます
  • すべての空白タイプは無視されます
  • 空の配列を受け入れる必要があります

私が最初に思いついたのは

'/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*/'

残念ながら、これは空の配列を受け入れません。だから私は別のものを試しました

'/\s*[\[|\{|\(][\s*\w+\s*]?[,\s*\w+]*\s*[\]|\}|\)]\s*/'`

これにより、空の配列が許可されますが、開き角かっこの後のコンマで始まる配列も許可されます(例[, item, item])。

私が現在行っているのは、2つの異なる正規表現を使用して、どちらかが一致することを確認することです。他の正規表現は、ここで説明した最初の正規表現と似ていますが、開始マーカーと終了マーカーの間に0個以上の空白文字しか使用できません。

4

2 に答える 2

3

わかりやすくするために、以下のスペースと改行を使用しました。それらを削除するか、それらを無視する正規表現オプションを使用する必要があります。この方法でregexを開発する方が簡単だと思います。

[\[\{\(]
    \s*
    (
    |
        \w+\s*
        (,\s*\w+\s*)*
    )
[\]\}\)]

これはテストされていませんが、非常に近いことを願っています。

于 2012-07-15T05:34:53.067 に答える
1

空の配列を特殊なケースとして扱うか、すでに設定されている配列の正規表現を使用してみてください。(未テスト)のようなもの:

'(?:[\({[]\s*[\)}\]]|/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*)/'
于 2012-07-15T05:26:17.670 に答える