一重引用符または二重引用符を含むkeyword='value'を解析するには正規表現が必要です

StackOverflow https://stackoverflow.com/questions/962120

  •  12-09-2019
  •  | 
  •  

質問

<value> 文字列が一重引用符で囲まれているか二重引用符で囲まれているかに関係なく、keyword='value' ペアを解析する正規表現 (PHP の preg_match() に適した) を作成するのに苦労しています。次のどちらの場合でも、<name> と <value> を取得する必要があります。<value> 文字列には、囲まれていない種類の引用符が含まれる可能性があります。

name="value"
name='value'
役に立ちましたか?

解決

Perlでは、これはうまくいくの正規表現です。最初の行の開始のために一致したことは、1つ以上の非=文字のために一致すると$ 1をそれらを設定します。次のそれは "または 'のマッチングを選択すると、次に=のための非括弧を見て、それに$ 2に設定します。

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/

あなたはそれのような空白の表現にマッチしたい場合。

この= ""

それ以外の場合、これは動作するはず*と+最後の二つを交換してください。

編集 コメントで述べたように。ダグ使用...

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/

これは、入力または値のエーテル末端に1つのオプションのホワイトスペースにマッチします、彼はラインマーカーの終わりを削除しています。

他のヒント

/^(\w+?)=(['"])(\w+?)\2$/

どの$1でキーと$3に値を配置します。

数年遅れましたが、この質問は Google で上位にランクされており、回答は私のニーズを満たしていなかったので、別の質問を紹介します。 表現:

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2

これは、エスケープされた引用符と引用符で囲まれていない値を考慮して、一重引用符または二重引用符と一致します。

name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""

ただし、値が欠落している場合は、次のキーと値のペアからキーが読み取られるという制限があります。これは、 カンマ区切りのリスト キー/値ペアの。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top