regex - 如何使 javascript 正则表达式在 postgresql regexp_matches 中工作?
问题描述
我希望在文档中捕获小于 30% 且最多 4 个小数位的所有百分比。
这是一个有效的 javascript 正则表达式示例:https ://regex101.com/r/iM3nX5/5
当我\b(?:[1-2]?[0-9]\.[0-9]{1,4})\b[^a-zA-Z\d<]{0,3}%?
在 Postgres 中使用这个正则表达式时,它不起作用:
SELECT regexp_matches('11111
11111.
11111.1111
.11111
a111.1111
99
010
101
100
100.01
2.95%
19.5113%
5.32
0.0250
9.32
24.32
0.0023
30.20
29.23', '\b(?:[1-2]?[0-9]\.[0-9]{1,4})\b[^a-zA-Z\d<]{0,3}%?', 'g')
关于我缺少什么使其在 Postgres 中工作的任何想法?
提前致谢。
解决方案
单词边界是罪魁祸首。您需要使用\m
/\M
来匹配前导/尾随单词边界,或者\y
相当于\b
. 见表9.20。正则表达式约束转义:
\m
仅在词
\M
首匹配 仅在词尾
\y
匹配 仅在词首或词尾匹配
例如,您可以使用
'\m(?:[1-2]?[0-9]\.[0-9]{1,4})\M[^a-zA-Z\d<]{0,3}%?'
或者
'\y(?:[1-2]?[0-9]\.[0-9]{1,4})\y[^a-zA-Z\d<]{0,3}%?'
在线查看PostgreSQL 演示。结果:
推荐阅读
- angular-material - 如何创建与材料字体图标对齐的自定义字体图标?
- outlook - 微软团队用户检测
- java - Spring Security 测试@WithMockUser 不起作用
- angular - 应用于 angular-slickgrid 中的树数据网格时,过滤器无法正常工作
- windows - 通过 .bat 文件仅关闭活动应用程序的窗口
- java - java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法初始化组件 [org.apache.catalina.webresources.Jar
- ios - 在 SwiftUI 中使用时,CGAffineTransform 缩放调整大小无法正常工作
- gridview - c# Gridview - 无法在后面的代码中将控件绑定到 RowDataBound
- c# - C# WebAPI - System.Web.HttpContext - ObjectDisposedException“流已关闭”分段上传
- pine-script - 使用 SMA 的 pinescript 交叉价格似乎不起作用