gpt4 book ai didi

正则表达式在文本 PostgreSQL 中仅查找 6 位数字

转载 作者:行者123 更新时间:2023-11-29 11:28:12 25 4
gpt4 key购买 nike

我需要在 PostgreSQL 中构建一个查询,并且需要查找所有包含 6 位数字的文本条目(例如 000999019290998981234567 等)。问题是数字在字符串的开头或结尾不是必需的。

我试过了,但没有成功:

  • [0-9]{6} - 返回超过 6 位数字的部分
  • (?:(?<!\d)\d{6}(?!\d)) - postgresql 不知道lookbehind
  • [^0-9][0-9]{6}[^0-9] 及其变体,但无济于事。

构建我自己的 Perl/C 函数并不是真正的选择,因为我不具备所需的技能。知道目前可以使用什么正则表达式或其他我无法使用的技巧吗?

编辑

输入样本:

  • aa 0011527 /CASA -> 应该返回 NOTHING
  • aa 001152/CASA -> 应该返回 001152
  • aa001152/CASA -> 应该返回 001152
  • aa0011527/CASA -> 应该返回什么
  • aa001152 /CASA -> 应该返回 001152

最佳答案

如果 PostgreSQL 支持字边界,使用\b:

\b(\d{6})\b

编辑:

\b 在 PostgreSQL 中表示 backspace,因此它不是单词边界。

http://www.postgresql.org/docs/8.3/interactive/functions-matching.html#FUNCTIONS-POSIX-REGEXP但是,将向您解释您可以使用 \y 作为单词边界,因为它意味着仅在单词的开头或结尾匹配,所以

\y(\d{6})\y

应该可以。

\m(\d{6})\M

应该也可以。

PostgreSQL 正则表达式中单词匹配的完整列表:

Escape  Description
\A matches only at the beginning of the string (see Section 9.7.3.5 for how this differs from ^)
\m matches only at the beginning of a word
\M matches only at the end of a word
\y matches only at the beginning or end of a word
\Y matches only at a point that is not the beginning or end of a word
\Z matches only at the end of the string (see Section 9.7.3.5 for how this differs from $)

新编辑:

根据您的编辑,您应该能够执行此操作:

(^|[^\d])(\d+)([^\d]|$)

关于正则表达式在文本 PostgreSQL 中仅查找 6 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14503267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com