正则表达式

  首先正则ORACLE使用正则表达式的函数为REGEXP_LIKE():

  下面这段可以匹配并只匹配出数字。

  含义为: ^ 表示字符串的开始符 , [0-9] 表示任意一个数字, + 表示匹配一个或多个前个字符, $ 表示字符串的结束符。

SELECT * FROM  REG_TEST   WHERE REGEXP_LIKE(TEXT , '^[0-9]+$') ; 

  可以匹配的字符串:1234567890

  

  下面这段SQL可以匹配出标准格式的千分符金额:

  含义为单个字符含义:

符号 名称 含义
^ 起始锚点 匹配字符串的开始位置
$ 结束锚点 匹配字符串的结束位置
? 问号量词 匹配前面的元素零次或一次(即可选)
* 星号量词 匹配前面的元素零次或多次(任意次)
+ 加号量词 匹配前面的元素一次或多次(至少一次)

   组合控制字符的含义为:

符号 名称 含义
[] 字符类 匹配方括号内的任意一个字符
{} 量词范围 匹配前面元素的指定次数
() 分组(子表达式) 将多个元素组合成一个单元,并可捕获
SELECT * FROM REG_TEST  WHERE REGEXP_LIKE(TEXT, '^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$');

   最后的执行的SQL为: 可匹配的字符类型为:12,123,234,555.031111111

 

  匹配汉字字符 在ORACLE 用下面的代码可以查询到ORACLE基础的字符信息 , 查询结果如下图所示 , 其中 NLS_CHARACTERSET    ZHS16GBK 为GBK格式

   SELECT * FROM nls_database_parameters;

 

image

  在GBK格式中 , \x00-\xFF 代表单个ASCII字符 , 而两个相连的ASCII字符代表中日韩字符 , 而 A-Za-z代表所有的英文。

 

SELECT * FROM REG_TEST 
WHERE REGEXP_LIKE(TEXT, '[^\x00-\xFF]{2}')  -- 匹配至少2个非ASCII字符
AND NOT REGEXP_LIKE(TEXT, '[A-Za-z]')      -- 排除任何英文字母

 

posted on 2025-08-21 18:51  顾念啊  阅读(15)  评论(0)    收藏  举报