通过RegExp从Oracle中的String中删除简单的HTML-Tags,需要说明

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)

现在,搜索>将在第一次>遇到停止.

注意也.包括>,因此贪婪的变体(没有?)吞下>除了最后一个之外的所有.