正则表达式在 APEX 中不起作用,在 RegexPlanet 上起作用

Regex not working in APEX, working on RegexPlanet

我正在尝试为用户应输入 Oracle JDBC 瘦连接 URL 的字段创建验证,例如:

我尝试使用 RegexPlanet 测试正则表达式,它说它正在工作(我正在使用的正则表达式):

^jdbc:oracle:thin:[@//]*[.\w]+:\d+[:]*[/]*[a-zA-Z0-9.]*$

但是,当我尝试使用此正则表达式验证表单时,它会显示错误消息,即使我使用的 URL 与上面的正则表达式完全相同。其他验证工作正常。

A JDBC 瘦驱动程序连接字符串可以采用以下格式之一:

jdbc:oracle:thin:@[HOST][:PORT]:SID
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
jdbc:oracle:thin:[USER/PASSWORD]@[HOST][:PORT]:SID
jdbc:oracle:thin:[USER/PASSWORD]@//[HOST][:PORT]/SERVICE

其中 HOST 可以是 IP 地址或名称。

如果您忽略 username/password,那么要匹配的正则表达式类似于:

^jdbc:oracle:thin:@(//)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\w+):\d+[:/][a-zA-Z0-9.]+$

(虽然它并不完美 - 但一个完美的正则表达式来匹配它会很大)

查询:

WITH connections ( conn ) AS (
  SELECT 'jdbc:oracle:thin:@//192.168.2.1:1521/XE' FROM DUAL UNION ALL
  SELECT 'jdbc:oracle:thin:@192.168.2.1:1521:X01A' FROM DUAL UNION ALL
  SELECT 'jdbc:oracle:thin:@//192.168.2.1:1521/COM.EXAMPLE' FROM DUAL
)
SELECT *
FROM   connections
WHERE  REGEXP_LIKE( conn, '^jdbc:oracle:thin:@(//)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\w+):\d+[:/][a-zA-Z0-9.]+$' );

结果:

CONN                                           
------------------------------------------------
jdbc:oracle:thin:@//192.168.2.1:1521/XE          
jdbc:oracle:thin:@192.168.2.1:1521:X01A          
jdbc:oracle:thin:@//192.168.2.1:1521/COM.EXAMPLE