【发布时间】:2015-10-17 13:47:34
【问题描述】:
我想替换在 Oracle 的 REGEXP_REPLACE 中找到的值。我使用 regex101.com 工具来调试我的正则表达式,它也突出显示了结果,但是如果我将此表达式放入我的选择中,它什么也不做......它没有替换我想要的字符串。所以,我的问题是,为什么这种模式在 Oracle PL/SQL 中是错误的?
select REGEXP_REPLACE('SOME XML DATAS', '/(?<=</FIRST_TAG>)(.*)(?=</LAST_TAG>)/s', '<REPLACE_TAG xsi:nil="1"/>') from dual
如你所见,我在两个结束标签之间进行搜索。
示例 XML:
<?xml version='1.0' encoding='UTF-8'?>
<LAST_TAG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:bla-bla-bla">
<DEFAULT_LANGUAGE>en</DEFAULT_LANGUAGE>
<DEBUG>0</DEBUG>
<DEBUG_LEVEL>MEDIUM</DEBUG_LEVEL>
<DEBUG_FILE>bla-bla.log</DEBUG_FILE>
<FIRST_TAG>
<LOGICAL_PRINTER>
<ID>PRINTER1</ID>
<PHYSICAL_PRINTER>Dummy_Printer</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT01</ID>
<PHYSICAL_PRINTER>PRINT01</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT012</ID>
<PHYSICAL_PRINTER>PRINT02</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT015</ID>
<PHYSICAL_PRINTER>PRINT05</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT019</ID>
<PHYSICAL_PRINTER>PRINT019</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT010</ID>
<PHYSICAL_PRINTER>PRINT010</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT_ID01</ID>
<PHYSICAL_PRINTER>\\111.111.111.111\PRINT011</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT_ID03</ID>
<PHYSICAL_PRINTER>\\111.111.111.111\PRINT013</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT_ID04</ID>
<PHYSICAL_PRINTER>\\111.111.111.111\PRINT014</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>PRINT_ID05</ID>
<PHYSICAL_PRINTER>\\111.111.111.111\PRINT015</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>BUDCOLOR</ID>
<PHYSICAL_PRINTER>\\url\printer</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
<LOGICAL_PRINTER>
<ID>NAMENAME</ID>
<PHYSICAL_PRINTER>\\url\printer</PHYSICAL_PRINTER>
</LOGICAL_PRINTER>
</FIRST_TAG>
<LOCALE_LIST>
<LOCALE>
<DISPLAY_NAME>English (United States)</DISPLAY_NAME>
<COUNTRY>US</COUNTRY>
<LANGUAGE>en</LANGUAGE>
<VARIANT xsi:nil="1"/>
</LOCALE>
</LOCALE_LIST>
</LAST_TAG>
非常感谢!
【问题讨论】:
-
用捕获组替换环视。
-
...REGEXP_REPLACE in Oracle. I used the regex101.com tool...*Facepalm* 请始终交叉检查文档以查看可以使用的内容。 -
我忘了说我是正则表达式的菜鸟,所以没必要烧我。
-
这里的重点是正则表达式的方言和实现方式略有不同,因此在一个工具中工作的正则表达式可能不适用于另一种工具。