Bas*_*sti 7 regex oracle plsql
我不明白,为什么我的列reg1和reg2从我的字符串中删除"bbb",只有reg3按预期工作.
WITH t AS (SELECT 'aaa <b>bbb</b> ccc' AS teststring FROM dual)
SELECT
teststring,
regexp_replace(teststring, '<.+>') AS reg1,
regexp_replace(teststring, '<.*>') AS reg2,
regexp_replace(teststring, '<.*?>') AS reg3
FROM t
TESTSTRING REG1 REG2 REG3
aaa <b>bbb</b> ccc aaa ccc aaa ccc aaa bbb ccc
Run Code Online (Sandbox Code Playgroud)
非常感谢!
Oli*_*bes 10
因为正则表达式默认是贪心的.即表达式.*或.+尝试尽可能多的字符.因此<.+>将从第一个<延伸到最后一个>.使用惰性运算符使其变得懒惰?:
regexp_replace(teststring, '<.+?>')
Run Code Online (Sandbox Code Playgroud)
要么
regexp_replace(teststring, '<.*?>')
Run Code Online (Sandbox Code Playgroud)
现在,搜索>将在第一次>遇到停止.
注意也.包括>,因此贪婪的变体(没有?)吞下>除了最后一个之外的所有.
| 归档时间: |
|
| 查看次数: |
15424 次 |
| 最近记录: |