Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
PostgreSQL regexp.replace所有不需要的字符_Postgresql - Fatal编程技术网

PostgreSQL regexp.replace所有不需要的字符

PostgreSQL regexp.replace所有不需要的字符,postgresql,Postgresql,我的PostgreSQL表中有一些写得很乱的注册码,比如MU-321-AB、MU/321/AB、MU 321-AB等等…… 我需要清除所有这些才能得到MU321AB 为此,我使用以下表达式: SELECT DISTINCT regexp_replace(ccode, '([^A-Za-z0-9])', ''), ... 此表达式在“NET”中按预期工作,但在PostgreSQL中不按预期工作,因为它只“清除”第一次出现的不需要的字符 如何修改正则表达式以替换字符串中所有不需要的字符,从而只使用

我的PostgreSQL表中有一些写得很乱的注册码,比如MU-321-AB、MU/321/AB、MU 321-AB等等……
我需要清除所有这些才能得到MU321AB

为此,我使用以下表达式:

SELECT DISTINCT regexp_replace(ccode, '([^A-Za-z0-9])', ''), ...
此表达式在“NET”中按预期工作,但在PostgreSQL中不按预期工作,因为它只“清除”第一次出现的不需要的字符


如何修改正则表达式以替换字符串中所有不需要的字符,从而只使用字母和数字获得清晰的代码?

使用
g
lobal标志,但不使用任何捕获组:

SELECT DISTINCT regexp_replace(ccode, '[^A-Za-z0-9]', '', 'g'), ...

请注意,全局标志是标准正则表达式解析器的一部分,因此在本例中.NET不遵循标准。另外,由于您不希望从字符串中提取任何内容-您只想替换一些字符-因此不应使用捕获组
()

嗨,Patrick谢谢您的回答。我删除了“捕获组”,添加了一个“g”标志,这个示例正如预期的那样运行良好。但还有一个问题出现。postgreSQL的正则表达式是否可以是unicode的,这样它就可以使用诸如“ü”、“š”之类的字符?如果可以,正则表达式会是什么样子?是的,这可以通过在模式字符串中使用相关字符的代码点来实现,例如
\u00F3
表示“ü”,而
\u0161
表示“š”。但你会明白这很快就会变得相当乏味。有关更多通用(非PG特定)信息,请参见。我特别不知道Unicode脚本或块是否可以在PG中工作,这样您就可以一次性匹配所有拉丁扩展字符。好的,再次感谢。我在模式中添加了上下unicodes,出于我的实际目的,这项工作做得很好。我真的需要读一些关于正则表达式的书。。。