PostgreSQL中正确的正则表达式

时间:2016-06-27 14:30:12

标签: regex postgresql

我有一个名为regions和column region的表,它不是空的。其中有一个文字,即“塔什干”。我试图用表达式输入访问它。这是我的代码:

select * from regions where lower(region) ~ '[t]{1,}[k]{1,}';

正如您所看到的,我正在尝试连续包含字母tk。根据我的表达式:[t]{1,}[k]{1,},它应返回文本'Tashkent',但不返回。我的代码是否正确。你能否建议一个替代代码来获得“塔什干”这个词。知道我有字母tk

2 个答案:

答案 0 :(得分:1)

您需要指定tk

之间的字符
select lower('Tashkent') ~ 't{1,}.*k{1,}';
 ?column? 
----------
 t

答案 1 :(得分:1)

1)如果我理解你想要的正则表达式是没有必要的:

     select * from regions where region ilike '%t%k%'

2)如果你想用正则表达式完全做到这一点:

  • 你的请求:'t {1,}。* k {1,}'只有在你的字符串中有“tk”时才返回true,例如“azerty ttk qwerty”。
  • 一个很好的解决方案是Clodoaldo Neto的解决方案:lower(region)~'t {1,}。* k {1,}'

  • 你也可以删除带有区域〜'[tT] {1,}的低级函数。* [kK] {1,}'

  • 最后{1,}可以替换为+:region~'[tT] +。* [kK] +'