私は正規表現のルックアラウンドを練習しています。そのために、SQL挿入ステートメントからテーブル名を抽出しようとしています。正規表現が(?<=INSERT INTO )\w+(?= (\(|VALUES).+)あり、StringでテストしていINSERT INTO tests VALUES (regex, test)ます。正規表現が細心の注意を払って行われていないことは承知していますが、入力の部分文字列と一致することを期待してtestsいます。
私はJavaの正規表現エンジンを使用しており、正規表現を使用String.splitしているときと正規表現を使用しているときに何が起こるかの結果を出力していますPattern.matches。次の、一見矛盾する結果が得られます
regex> (?<=INSERT INTO )\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
[INSERT INTO , VALUES (regex, test)]
regex> (?<=INSERT INTO )\w+(?= (\(|VALUES).+)
string> INSERT INTO tests VALUES (regex, test)
false
これを記録に残すために、最初の結果を生成したコードは次のとおりです。
Arrays.toString(searchString.split(regex))
2番目のものはから来ました
Pattern.matches(regex, searchString)
split引数との一致で文字列を分割するのではありませんか?これは、正規表現が一致したtestsため、結果が一致したことを意味し[INSERT INTO , VALUES (regex, test)]ます。では、なぜPattern.matchesfalseを返したのでしょうか。私が逃したものはありますか?