我正在尝试匹配猫列表中的标记号:
Abyssinian 987
Burmese a1a
Dragon Li 2B
987 Cat
cat 987 Toyger
cat A1A Siamese
1
猫列表的标签号为:
987
a1a
2B
987
987
A1A
1
我试过使用正则表达式:
\b[0-9a-zA-Z]{1,3}\b
问题是它将匹配“猫”和“李”(在龙里)。它应该只匹配标签号。
标签号的要求如下:
1-3个字符,它必须至少包含一个整数(0-9)
它可以出现在字符串中的任何位置
另外,我使用Postgres正则表达式,我认为它使用POSIX正则表达式。(http://www.postgresql.org/docs/9.3/static/functions-string.html)
最佳答案
这在PostgreSQL中有效:
SELECT substring(cat FROM '\m(?=\w{0,2}\d)\w{1,3}\M') AS tag
FROM cat;
\m
和\M
。。beginning and end of a word.(?=\w{0,2}\d)
。。positive lookahead\w{1,3}
。。1-3 word characters假设每个字符串中都有一个匹配项,
substring()
(不带“global”开关'g'
)对于作业比返回数组(即使是单个匹配项)的regexp_matches()
更好。substring()
也快一点。SQL Fiddle.