sql >> データベース >  >> RDS >> Oracle

IPv4とは別のIPv6の正規表現(RegEx)

    この回答で@nhahtdhから多くの助けを借りてhttps://stackoverflow.com/a/21943960/3112803 私はそれを分割することが最良の解決策であることに気づきました。以下は、PL/SQLでそれを行う方法の例です。 、しかしそれは他の言語でこのように行うことができます。 ColdFusionでも同じことを行います 。 PL/SQLの場合 パターンは512文字未満にとどまる必要があるため、パターンを分割するとうまく機能し、理解しやすくなります。元の質問のすべてのテストケースに合格しました。

    if (
        /* IPv6 expanded */
        REGEXP_LIKE(v, '\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z')
        /* IPv6 shorthand */
        OR (NOT REGEXP_LIKE(v, '\A(.*?[[:xdigit:]](:|\z)){8}')
        AND REGEXP_LIKE(v, '\A([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,6})?::([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,6})?\z'))
        /* IPv6 dotted-quad notation, expanded */
        OR REGEXP_LIKE(v, '\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){5}:(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}\z')
        /* IPv6 dotted-quad notation, shorthand */
        OR (NOT REGEXP_LIKE(v, '\A(.*?[[:xdigit:]]:){6}')
        AND REGEXP_LIKE(v, '\A([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,4})?::([[:xdigit:]]{1,4}:){0,5}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}\z'))
    ) then
    


    1. SQLServerのデフォルトインスタンスとSQLServerの名前付きインスタンスに接続する方法-SQLServer/TSQLチュートリアルパート2

    2. 年を無視する日付計算をどのように行いますか?

    3. 疑問符を含むPostgreSQLJSON(B)演算子を使用するにはどうすればよいですか? JDBC経由

    4. Pythonを使用してSQLServerデータベースにcsvファイルを書き込む