regex - 带下划线的特殊字符(postgres 中的正则表达式)
问题描述
如何识别正则表达式模式,包括 Postgres 中的下划线?
这是我的实际正则表达式:
[^\w]+
它很好地匹配字符,问题在于下划线。例如,当我使用该正则表达式调用函数时:
select regexp_replace('hello_world!', '[^\w]+', ' ', 'g')
我期待着hello world
。如何匹配下划线?
解决方案
问题是也\w
匹配下划线,当您在否定字符类中使用它时,模式与_
字符不匹配。您可以检查类速记转义表:
\w
[[:alnum:]_]
(注意包括下划线)
要删除除字母数字以外的所有字符,您可以取出_
并使用
select regexp_replace('hello_world!', '[^[:alnum:]]+', ' ', 'g')
在这里,[^[:alnum:]]+
匹配一个或多个 ( +
) 连续字符,而不是 ([^...]
是一个否定的括号表达式) 字母和数字([:alnum:]
POSIX 字符类匹配字母和数字)。
好吧,你不妨使用(?:\W|_)+
. 不幸的是,一个常见的正则表达式构造 like[\W_]+
将不起作用,因为\W
(以及其他否定的速记,例如\S
and\D
是非法的内括号表达式。更多详细信息可在手册中找到:
在括号表达式中,
\d
,\s
, and\w
丢失了它们的外括号, and\D
,\S
, and\W
是非法的。(因此,例如,[a-c\d]
等价于[a-c[:digit:]]
。此外,[a-c\D]
等价于[a-c^[:digit:]]
的 是非法的。)
要摆脱产生的尾随/前导空格,您可以使用trim
:
select trim(regexp_replace('hello_world!', '[^[:alnum:]]+', ' ', 'g'))
推荐阅读
- rest - 如何在 Xamarin.Forms 中上传文件?
- c# - 如何从 ComboBox 获取泛型类型的项目
- jenkins - 使用输入列出所有标签(Jenkinsfile)
- c# - 将列表项转换为字符串
- vue.js - Vue Part没有出现在主页上
- python - flask-sqlachemy:无法让父母收听并更新对孩子的更改
- spring - JpaRepository 与不同表上的本机 @Query
- kubernetes - 在 Kubernetes 中部署标签有什么用?
- python - 尝试在python中为全局变量赋值时出现问题
- configuration - Youtrack - 更改基本网址问题