【问题标题】:How to make javascript regex work in postgresql regexp_matches?如何使 javascript 正则表达式在 postgresql regexp_matches 中工作?
【发布时间】:2019-03-24 05:55:19
【问题描述】:

我希望捕获文档中小于 30% 且最多 4 位小数的所有百分比。

这是一个有效的 javascript 正则表达式示例:https://regex101.com/r/iM3nX5/5

当我在 Postgres 中使用这个正则表达式 \b(?:[1-2]?[0-9]\.[0-9]{1,4})\b[^a-zA-Z\d<]{0,3}%? 时,它不起作用:

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 中工作吗?

提前致谢。

【问题讨论】:

    标签: regex postgresql


    【解决方案1】:

    单词边界是罪魁祸首。您需要使用 \m / \M 来匹配前导/尾随单词边界,或者使用 \y 来匹配 \b。见Table 9.20. Regular Expression Constraint Escapes

    \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 demo online。结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多