次の正規表現では:
[a-zA-Z_]?\"(\\.|[^\\"])*\"
とは\"(\\.|[^\\"])*\"どういう意味ですか?
説明は次のとおりです。
[ # start character class
a-zA-Z # case insensitive character match
_ # underscores are allowed too
] # end character class
? # match zero or one time
( # start group
\\. # dot character
| # OR
[ # start character class
^ # match any character
\\" # except double quote
] # end character class
) # end group
* # match zero or more occurrences
Javaに似ているので分解
\"(\\.|[^\\"])*\"
我々が得る:
\"文字通りの引用"(グループを開始\\.リテラルドット|論理「または」[キャラクタークラス開始^否定\\"不必要にエスケープされた引用符 - と同等\"- にも 3 つまたは 1 つのバックスラッシュが必要なので、そのままでは構文エラーです。]エンドキャラクタークラス)エンドグループ*任意の数\"文字通りの引用"全体として、これは次のことを意味します: 引用符の間に任意の数のドット (ゼロのドットを含む)
文字クラスは貪欲にならないための試みですが、これを行う簡単な方法があります - 「貪欲でない」 operator を使用するだけ*?です。つまり、次のように置き換えることができます。
\"\\.*?\"