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
非常感谢!
Oli*_*bes 10
因为正则表达式默认是贪心的.即表达式.*或.+尝试尽可能多的字符.因此<.+>将从第一个<延伸到最后一个>.使用惰性运算符使其变得懒惰?:
regexp_replace(teststring, '<.+?>')
要么
regexp_replace(teststring, '<.*?>')
现在,搜索>将在第一次>遇到停止.
注意也.包括>,因此贪婪的变体(没有?)吞下>除了最后一个之外的所有.