私は正規表現のルックアラウンドを練習しています。そうするために、SQL挿入ステートメントからテーブル名を抽出しようとしています。私は正規表現(?<=INSERT INTO)\w+(?= (\(|VALUES).+)
を持っており、それは文字列INSERT INTO tests VALUES (regex, test)
でテストしています。私の正規表現は細心の注意を払っていないことに気付いていますが、私の入力の部分文字列tests
と一致すると思います。Regex:String.splitとPattern.matchesが一致しません
私は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
、以下を得る秒1は
Pattern.matches(regex, searchString)
から来ている間、最初の結果を生成したコードが
Arrays.toString(searchString.split(regex))
です
split
は、一致する文字列をその引数に分割していませんか?つまり、正規表現はtests
と一致し、結果は[INSERT INTO , VALUES (regex, test)]
となります。だから、なぜPattern.matches
が偽を返したのですか?何か私が逃した?
'Pattern.matches'は文字列全体の一致に使用されていませんか?あなたのケースでは、ルックアラウンドは実際には「マッチング」ではなく、テストしています。 –