Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子2011-02-17 22:055个参数
第一个是输入的字符串
第二个是正则表达式
第三个是标识从第几个字符开始正则表达式匹配。(默认为1)
第四个是标识第几个匹配组。(默认为1)
第五个是是取值范围:
i:大小写不敏感;
c:大小写敏感;
n:点号 . 不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
全部测试数据
SQL> select * from test_reg_substr;
A
-----------------------------------
ABC123XYZ
ABC123XYZ456
<Name>Edward</Name>
检索中间的数字
SQL> SELECT
2 REGEXP_SUBSTR(a,'[0-9]+')
3 FROM
4 test_reg_substr
5 WHERE
6 REGEXP_LIKE(a, '[0-9]+');
REGEXP_SUBSTR(A,'[0-9]+')
---------------------------------
123
123
检索中间的数字(从第一个字母开始匹配,找第2个匹配项目)
SQL> SELECT
2 NVL(REGEXP_SUBSTR(a,'[0-9]+',1, 2), '-') AS a
3 FROM
4 test_reg_substr
5 WHERE
6 REGEXP_LIKE(a, '[0-9]+');
A
------------------------------------------------------
-
456
取得“字符集合”
SQL> SELECT
2 REGEXP_SUBSTR(a, '\w+')
3 FROM
4 test_reg_substr
5 WHERE
6 REGEXP_LIKE(a, '\w+');
REGEXP_SUBSTR(A,'\W+')
-------------------------------
ABC123XYZ
ABC123XYZ456
Name
取得“字符集合”(从第一个字母开始匹配,找第2个匹配项目)
SQL> SELECT
2 NVL(REGEXP_SUBSTR(a, '\w+',1, 2), '-') AS a
3 FROM
4 test_reg_substr
5 WHERE
6 REGEXP_LIKE(a, '\w+');
A
---------------------------------------------------
-
-
Edward
----------------------------------------------------应用pr_bubble_Sort('12,343,435,434')
create or replace procedure pr_bubble_Sort(
in_arry in VARCHAR2
)
IS ------定义一个表数据,建立虚拟表,避免实表问题
type one_arr is table of number
index by binary_integer;
my_one_arr one_arr;
n_cur_index number(6):=0;
n_inner_index number(6):=0;
n_temp number(6);
BEGIN
-----在oracle中使用正则表达式
for i in (select regexp_substr(in_arry,'[^,]+',1,rownum) my_date
from dual
connect by rownum<= length(in_arry)
- length(replace(in_arry,',',''))+1)
LOOP
----------------开始循环体
n_cur_index := n_cur_index +1;
my_one_arr(n_cur_index) := i.my_date;
end loop;
if in_arry is not null then
n_inner_index := n_cur_index;
for j in 1..n_cur_index
loop
n_inner_index := n_inner_index -1;
for k in 1..n_inner_index
loop
if my_one_arr(k) > my_one_arr(k+1) then
n_temp := my_one_arr(k);
my_one_arr(k) := my_one_arr(k+1);
my_one_arr(k+1) := n_temp;
end if;
end loop;
end loop;
for l in 1..n_cur_index
loop
dbms_output.put_line(my_one_arr(l));
end loop;
end if ;
end;