Postgres模式匹配字符串的中间字母
Postgres pattern matching middle letters of a string
我如何匹配一个名字,这样名字的中间字母之一必须来自单词 'qwerty'(因此包含字母 'q'、'w' , 'e', 'r', 't','y')?
我很好奇你如何确定中间字母是什么,这将使用我假设的一些字符串计数。
到目前为止我尝试过的:
WHERE name LIKE '%(q|w|e|r|t|y)%'
匹配的示例:
Martens
Van Rossem
Frimout
Gates
注意:在我的练习上下文中,中间字母表示第一个和最后一个字母之间的任何内容。我仍然很好奇如何匹配字符串的 'median' 字母。
您似乎想要在左右匹配相同数量的字符,然后在中间匹配一些字符,但这在 PostgreSQL 正则表达式中是不可能的。
要查找包含预定义集中任何字符的记录,您可以使用 SIMILAR TO
和 %[qwerty]%
模式:
SIMILAR TO '%[qwerty]%'
%
是匹配任意文本的正则通配符,[qwery]
是匹配单个字符的括号表达式,q
、w
、e
、r
、t
或 y
.
如果你只是想确保这些字符不在开头和结尾,你可以尝试这样的表达式
SIMILAR TO '[^qwerty]+[qwerty]+[^qwerty]+'
请记住 PostgreSQL SIMILAR TO 模式需要完整的字符串匹配,您将只会获得以 q
以外的 1+ 个字符开头的记录,w
、e
、r
、t
、y
([^...]
是一个取反的括号表达式) ,然后是 1 个或多个必需的字符,然后是 1 个以上的字符。
另一种可能更简单的解决方案是使用 PostgreSQL 的正则表达式匹配运算符 ~
:
WHERE name ~ '.[qwerty].'
该模式表示:任意字符,后跟任意字符 qwerty
,后跟另一个任意字符。
请注意,PostgreSQL 在内部将 SIMILAR TO
表达式转换为正则表达式。
我如何匹配一个名字,这样名字的中间字母之一必须来自单词 'qwerty'(因此包含字母 'q'、'w' , 'e', 'r', 't','y')?
我很好奇你如何确定中间字母是什么,这将使用我假设的一些字符串计数。
到目前为止我尝试过的:
WHERE name LIKE '%(q|w|e|r|t|y)%'
匹配的示例:
Martens
Van Rossem
Frimout
Gates
注意:在我的练习上下文中,中间字母表示第一个和最后一个字母之间的任何内容。我仍然很好奇如何匹配字符串的 'median' 字母。
您似乎想要在左右匹配相同数量的字符,然后在中间匹配一些字符,但这在 PostgreSQL 正则表达式中是不可能的。
要查找包含预定义集中任何字符的记录,您可以使用 SIMILAR TO
和 %[qwerty]%
模式:
SIMILAR TO '%[qwerty]%'
%
是匹配任意文本的正则通配符,[qwery]
是匹配单个字符的括号表达式,q
、w
、e
、r
、t
或 y
.
如果你只是想确保这些字符不在开头和结尾,你可以尝试这样的表达式
SIMILAR TO '[^qwerty]+[qwerty]+[^qwerty]+'
请记住 PostgreSQL SIMILAR TO 模式需要完整的字符串匹配,您将只会获得以 q
以外的 1+ 个字符开头的记录,w
、e
、r
、t
、y
([^...]
是一个取反的括号表达式) ,然后是 1 个或多个必需的字符,然后是 1 个以上的字符。
另一种可能更简单的解决方案是使用 PostgreSQL 的正则表达式匹配运算符 ~
:
WHERE name ~ '.[qwerty].'
该模式表示:任意字符,后跟任意字符 qwerty
,后跟另一个任意字符。
请注意,PostgreSQL 在内部将 SIMILAR TO
表达式转换为正则表达式。