1

次の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 
4

2 に答える 2

3

本当の問題は、どうしてJavaで機能するのかということです。
文字列03211234090*0000*75が正規表現と一致しないため、las部分(2番目のアステリックスの後は3桁または1000である必要があり、2つしかありません)

于 2012-12-26T11:44:11.233 に答える
3

検索パターンにバグがあります:\\*。をエスケープするために\*必要なのは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最後のアスタリスクの後が受け入れられ、行が取得されます。

于 2012-12-26T11:42:04.077 に答える