一重引用符または二重引用符で始まり、終わる文字列を検索する RegEx を作成したいと考えています。
たとえば、次のようなケースに一致させることができます。
String: "Hello World"
RegEx: /[\"\'][^\"\']+[\"\']/
ただし、次のように文字列自体に引用符が表示されると問題が発生します。
String: "Hello" World"
上記の式が機能しないことはわかっています。
私ができるようにしたいのは、とにかく必要な機能になるため、文字列自体にエスケープを含めることです。
String: "Hello\" World"
これで、グループ内のさまざまなパターンを持つ長くて複雑な式を思いつくことができました。そのうちの 1 つが次のとおりです。
RegEx: /[\"\'][^\"\']+(\\\"|\\\')+[^\"\']+[\"\']/
しかし、それは私には過剰に思えます。より短く、よりエレガントな解決策があると思います。
意図した構文:
run arg1 "arg1" "arg3 with \"" "\"arg4" "arg\"\"5"
ご覧のとおり、引用符は実際には、スペースを含む文字列が 1 つの文字列としてカウントされるようにするためにのみ使用されます。心配しないでくださいarg1
。引用符で囲まれていない引数を照合できるはずです。
これを簡単にします。引数は二重引用符を使用してのみ引用できます。したがって、この質問の要件から一重引用符を削除しました。
私はRui Jarimbaの例を修正しました:
/(?<=")(\\")*([^"]+((\\(\"))*[^"])+)((\\"")|")/
これでほとんどのケースがうまく説明できるようになりましたが、これを無効にできる最後のケースが 1 つあります。
run -a "arg3 \" p2" "\"sa\"mple\"\\"
2 番目の引数 endは、この場合、ネストされた文字列の末尾にバックスラッシュを許可する従来の方法ですが、残念ながら正規表現は、パターンがパターンの末尾にまだ存在する\\"
ため、これをエスケープされた引用符と見なします。\"