次のSQLは機能しませんが、Javaで同じ正規表現を使用すると、正常に機能します
SELECT * FROM tbl WHERE REGEXP_LIKE
(MESSAGE, '^(92|0)?(3[0-9]{9})\\*([0-9]{4})\\*(([0-9]{3})|1000)$')
私が間違っていることを助けてください。
私は次の文字列を比較しています
03211234090*0000*75
本当の問題は、どうしてJavaで機能するのかということです。
文字列03211234090*0000*75
が正規表現と一致しないため、las部分(2番目のアステリックスの後は3桁または1000である必要があり、2つしかありません)
検索パターンにバグがあります:\\*
。をエスケープするために\*
必要なのは1つだけなので、これはである必要があります。\
*
SELECT *
FROM tbl
WHERE REGEXP_LIKE(MESSAGE, '^(92|0)?(3[0-9]{9})\*([0-9]{4})\*(([0-9]{3})|1000)$')
もう1つの問題は、\*(([0-9]{3})|1000)$
文字列の最後の部分です。指定した文字列は03211234090*0000*75
、0〜9または「1000」の間の3桁で終わっていません。
$
文字列は、その直前の式で終了する必要があることを意味します。
解決策として、\*(([0-9]{2, 3})|1000)$
ビジネスロジックで許可されているかどうかを確認してください。これにより、2桁または3桁、または1000
最後のアスタリスクの後が受け入れられ、行が取得されます。