我正在寻找其他语言的例子,但我真的不懂正则表达式,所以很难转换成oracle语法。
我想我想使用regexp\u replace,我想用破折号替换逗号,但前提是逗号后面没有空格。例如:
餐桌树,树种,枫树
将替换第一个逗号,但不替换第二个:
餐桌树种,枫树
我可以做一个简单的regexp\u替换,但与我想要的正好相反:
REGEXP_REPLACE(FieldToChange, ', ', '-')
这和直接替换是一样的,我理解。
REGEXP_REPLACE(FieldToChange, ',[^ ]', '-')
它只抓取后面没有空格的逗号,但它也会抓取下一个字符,结果是:
桌上型树种,枫树
我正在阅读oracle文档,但和许多文档一样,在这些文档变得有意义之前,您需要理解很多内容。因此,我真的想要一个解释,而不是一个简单的答案(对于其他语言,我找到的其他答案只是给出了答案,这无助于我将其转换为oracle。)
1条答案
按热度按时间xdnvmnnf1#
你的正则表达式
REGEXP_REPLACE(FieldToChange, ',[^ ]', '-')
将逗号与,
任何字符,除了[^ ]
反括号表达式。匹配的文本替换为-
,您的替换模式。在regex中,一个没有跟在其他模式后面的位置通常是通过一个负的向前看(比如
(?! )
). 但是,oracleregex引擎是基于posix的,不支持lookarounds。您可以依靠以下捕获机制:
现在,
([^ ])
将除空格以外的任何字符捕获到组1中,您可以使用\1
在替换模式中。\1
是一个数字替换反引用。在你的模式中,最多可以有9个组,posix\1
-like pbackreferences不允许更多(来自1
至9
).如果还希望在字符串末尾匹配逗号,则需要在组中使用替代项:
这个
([^ ]|$)
捕获组匹配除空格或字符串结尾以外的任何字符。你不能使用[^ $]
因为$
在括号表达式中失去其字符串结束锚点的含义,并且[^ $]
匹配除空格和美元符号以外的任何字符。