Oracle正規表示式中注意的問題

2022-04-12 08:02:39 字數 2297 閱讀 8749

在oracle 11g中,當在正規表示式中用了中括號時,某些符號會匹配不了,如[\s\d],要用類似於[[:digit:][:blank:]]才能匹配成功,以下是我測試的例子:1--

中括號中的內容為一槓及空格([- ]),匹配成功,結果為:sa01-2345 6789 0123 4567 8900

2select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

3'sa\d[- ]\d[- ]\d[- ]\d[- ]\d[- ]\d|sa\d',

41, 1

,'i'

)) as

reg_str 

from

dual;56

--中括號中的內容為([-[:blank:]]),匹配成功,結果為:sa01-2345 6789 0123 4567 8900

7select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

8'sa\d[-[:blank:]]\d[-[:blank:]]\d[-[:blank:]]\d[-[:blank:]]\d[-[:blank:]]\d|sa\d',

91, 1

,'i'

)) as

reg_str 

from

dual;

1011

--如果將中括號換成小括號,匹配成功,結果為:sa01-2345 6789 0123 4567 8900

12select

to_char(regexp_substr(

'sa01  -  2345 6789 0123 4567 8900',

13'(sa)?\d(\s|-)\d(\s|-)\d(\s|-)\d(\s|-)\d(\s|-)\d|(sa)?\d',

141, 1

,'i'

)) as

reg_str 

from

dual;

1516

--中括號中的內容為([-[:digit:][:blank:]]),匹配成功,結果為:sa01-2345 6789 0123 4567 8900

17select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

18'(sa)?[-[:digit:][:blank:]]',

191, 1

,'i'

)) as

reg_str 

from

dual;

2021

--中括號中的內容為([-\d[:blank:]]),匹配失敗,結果為空

22select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

23'(sa)?[-\d[:blank:]]',

241, 1

,'i'

)) as

reg_str 

from

dual;

2526

--中括號內容如下,匹配失敗,結果為空

27select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

28'(sa)?[-\d\s]',

291, 1

,'i'

)) as

reg_str 

from

dual;

3031

--中括號內容如下,匹配失敗,結果為空

32select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

33'(sa)?[-\d ]',

341, 1

,'i'

)) as

reg_str 

from

dual;

3536

--中括號中的內容為([-\s]),匹配失敗,結果為空

37select

to_char(regexp_substr(

'sa01-2345 6789 0123 4567 8900',

38'sa\d[-\s]\d[-\s]\d[-\s]\d[-\s]\d[-\s]\d|sa\d',

391, 1

,'i'

)) as

reg_str 

from

dual;

oracle 正規表示式

with temp as select br.777 1 a from dual union all select bs.6 175 a from dual union all select d.140 supplement 1 a from dual union all select e.191 ...

oracle正規表示式

在資料庫可直接執行下面語句,但在程式中不能執行,regexp like t.ipaddress,25 0 5 2 0 4 0 9 01 0 9 0 9 25 0 5 2 0 4 0 9 01 0 9 0 9 報錯有特殊字元 在句末再加乙個 改為 regexp like t.ipaddress,25 ...

oracle正規表示式

oracle 10g支援正規表示式的四個新函式分別是 regexp like regexp instr regexp substr 和regexp replace。它們使用posix 正規表示式代替了老的百分號 和萬用字元 字元。特殊字元 匹配輸入字串的開始位置,在方括號表示式中使用,此時它表示不接...