我从 Postgre 正则表达式开始,致力于 PostgreSQL 8.3 版本。
我有一个记录表如下:
record
-----------
a
ab
abc
123abc
132abc
123ABC
abc123
4567
5678
6789
我正在学习一个简单的教程: www.oreillynet.com。 在我遇到以下查询之前,一切对我来说似乎都很清楚:
SELECT record FROM myrecords WHERE record ~ '[^0-9]';
教程说:
this expression returns strings that don't include digits.
但它向我返回了以下输出:
output
------
a
ab
abc
123abc
132abc
123ABC
abc123
任何人都可以向我解释这种行为吗?然后,我在该网站上尝试使用另一个表达式来排除在同一字符串中包含数字和小写字母的字符串。
最佳答案
这个命令:
SELECT record FROM myrecords WHERE record ~ '[^0-9]';
表示在record
字段中至少要有一个非数字字符(这是regex的意思)。
如果要查找包含数字和小写字母的记录,那么我希望使用如下正则表达式:
SELECT record FROM myrecords WHERE record ~ '[0-9a-z]';
这将返回所有至少有一个字符为数字或小写字母的记录。
如果你想得到没有数字的记录,那么你必须使用下面的正则表达式:
SELECT record FROM myrecords WHERE record ~ '^[^0-9]+$';
这里,方括号外的^
字符表示字段的开始,$
字符表示字段的结束,我们要求其中的所有字符之间是非数字。 +
表示至少应该有一个这样的字符。如果我们还允许空字符串,那么正则表达式将类似于 ^[^0-9]*$
。
关于regex - PostgreSQL 正则表达式 - 排除带数字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436618/