Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle替换逗号,但前提是后面没有空格_Sql_Regex_Oracle - Fatal编程技术网

Sql Oracle替换逗号,但前提是后面没有空格

Sql Oracle替换逗号,但前提是后面没有空格,sql,regex,oracle,Sql,Regex,Oracle,我正在寻找其他语言的例子,但我真的不懂正则表达式,所以很难转换为Oracle语法 我想我想使用REGEXP_REPLACE,我想用破折号替换逗号,但前提是逗号后面没有空格。例如: 餐桌树,树种,枫树 将替换第一个逗号,但不替换第二个: 表3枫树树种 我可以做一个简单的REGEXP_替换,但只能与我想要的相反: REGEXP_REPLACE(FieldToChange, ', ', '-') 这和直接替换一样,我理解 REGEXP_REPLACE(FieldToChange, ',[^ ]',

我正在寻找其他语言的例子,但我真的不懂正则表达式,所以很难转换为Oracle语法

我想我想使用REGEXP_REPLACE,我想用破折号替换逗号,但前提是逗号后面没有空格。例如:

餐桌树,树种,枫树

将替换第一个逗号,但不替换第二个:

表3枫树树种

我可以做一个简单的REGEXP_替换,但只能与我想要的相反:

REGEXP_REPLACE(FieldToChange, ', ', '-')
这和直接替换一样,我理解

REGEXP_REPLACE(FieldToChange, ',[^ ]', '-')
它只抓取后面没有空格的逗号,但它也会抓取下一个字符,从而导致:

表3-REE树种,枫树

我正在阅读Oracle文档,但与许多文档一样,在这些文档变得有意义之前,您需要了解很多内容。因此,我真的想要一个解释,而不是一个简单的答案。对于其他语言,我找到的其他答案只是给出了答案,这无助于我将其转换为Oracle。

您在REGEXP_REPLACEFieldToChange,“,[^]”,“-”中的正则表达式与逗号匹配,与[^]反括号表达式中的空格以外的任何字符匹配。匹配的文本将替换为替换模式-

在正则表达式中,一个没有跟在其他模式后面的位置通常是通过一个类似于“”的负前瞻来匹配或断言的。但是,Oracle正则表达式引擎是基于POSIX的,不支持lookarounds

您可以在此处使用捕获机制:

REGEXP_REPLACE(FieldToChange, ',([^ ])', '-\1')
现在,[^]将除空格以外的任何字符捕获到组1中,您可以在替换模式中使用\1引用组中的值\1是一个数字替换反向引用。模式中最多可以有9个组,类似POSIX\1的pbackreferences不允许从1到9的更多组

如果还希望在字符串末尾匹配逗号,则需要在组中使用替换项:

REGEXP_REPLACE(FieldToChange, ',([^ ]|$)', '-\1')
[^]|$capturing组匹配除空格外的任何字符或字符串结尾。无法使用[^$],因为$在括号表达式中失去了其字符串结尾锚定的含义,[^$]匹配除空格和美元符号以外的任何字符。

您在REGEXP_REPLACEFieldToChange,“,[^]”,“-”中的正则表达式与逗号匹配,与[^]反括号表达式中的空格以外的任何字符匹配。匹配的文本将替换为替换模式-

在正则表达式中,一个没有跟在其他模式后面的位置通常是通过一个类似于“”的负前瞻来匹配或断言的。但是,Oracle正则表达式引擎是基于POSIX的,不支持lookarounds

您可以在此处使用捕获机制:

REGEXP_REPLACE(FieldToChange, ',([^ ])', '-\1')
现在,[^]将除空格以外的任何字符捕获到组1中,您可以在替换模式中使用\1引用组中的值\1是一个数字替换反向引用。模式中最多可以有9个组,类似POSIX\1的pbackreferences不允许从1到9的更多组

如果还希望在字符串末尾匹配逗号,则需要在组中使用替换项:

REGEXP_REPLACE(FieldToChange, ',([^ ]|$)', '-\1')

[^]|$capturing组匹配除空格外的任何字符或字符串结尾。无法使用[^$],因为$在括号表达式中失去了其字符串结尾锚定的含义,[^$]匹配除空格和美元符号以外的任何字符。

谢谢。这开始有点道理了。解释可以帮助我学习,而不仅仅是编写代码。还有,它能用,这也是我想要的。谢谢。这开始有点道理了。解释可以帮助我学习,而不仅仅是编写代码。而且,它能工作,这也是我想要的。