正则表达式不在APEX工作,正在使用RegexPlanet

时间:2016-01-14 23:49:55

标签: regex oracle oracle-apex

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

  • 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

我尝试使用RegexPlanet对正则表达式进行测试,并说它正在运行(我正在使用的正则表达式):

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

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

1 个答案:

答案 0 :(得分:1)

JDBC Thin Driver Connection字符串可以采用以下格式之一:

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地址或名称。

如果忽略用户名/密码,那么匹配的正则表达式就像:

^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