を一致させるために必要とされる理由を私は句と私はJavascriptの正規表現 - 終端スペースは文字列全体
id BETWEEN 3 and 10
に対して一致しています次のJavaScript(
regex)
(?:(?:(between)(['"]?)(.*?)(\2)(and)(['"]?)(.*?)(\6)))
を持つSQLを解析しています
この正規表現が機能するには、正規表現の最後に\s
または\s+
を追加し、一致する文字列の最後にスペースを入れなければなりません。
(グループ7のキャプチャで)文字列の一部である10
と一致させるために、この余分なスペースのマッチングが必要な理由を説明できますか?この正規表現は、SQLフィルタを解析するために使用されるlarger regexから抽出されること
注:第6群
(?:(?:(between)(['"]?)(.*?)(\2)(and)(['"]?)(.*?)(\6)))
で
(\(*)([\w][\w\d.]*)\s*([<>!=]{1,2}|like|not like|is null|is not null|in\s*\()?\s*(?!and|or)(?:(?:(between)(['"]?)(.*?)(\5)(and)(['"]?)(.*?)(\9))|(?:(['"]?)(.*?)(\12)))\s*(\)*)\s+(?!'|")\s*(and|or)?\s*
を参照してください。したがって、 '。*?'はパターンの最後にあり、怠惰なパターンであり、一致することができる文字の最小量、つまりここではゼロと一致します。あなたが一致する必要があるものをさらに明確にすることなく、私は何も示唆することはできませんが、間違いなく '。*? 'はもっと貪欲なものに置き換えなければなりません。本当のパターンは何ですか? –
@WiktorStribiżew - 私は、より大きなパターンとmysqlフィルタを解析するために使われるリンクを含んでいます。 – mseifert
空の文字列の逆参照を境界として使用することはできないため、この方法には一定の問題があります。交互に使用し、区切られた部分を1つのキャプチャグループに取り込み、非空白のシーケンスを別のものに取り込む必要があります。 –