我想验证字符串是否以name开头(后跟3位数字)并以state结尾。
我的代码做到了
实际输出:不是,不是,是,是,是,是,不是。
预期输出:不,不,不,不,不,是,不
CREATE TABLE yourtable
("f1" varchar(19))
;
INSERT INTO yourtable
("f1")
VALUES
('name123/state/LA'),
('name123/state/LA/X1'),
('name1/state/'),
('nameabcccc/state/'),
('name3444/state/'),
('name444/state/'),
('name1/state/LA')
;
SELECT f1,
CASE when trim(f1) ~ '^name[^/]*/state\/$' then 'YES' ELSE 'NOT' END col2
FROM yourtable
答案 0 :(得分:3)
以名称开头(后跟3位数字),以状态结尾。
这不是您的正则表达式所做的。您缺少3位数字的模式,/
字符不需要转义。
以下内容将发挥您的作用
trim(f1) ~ '^name[0-9]{3}[^0-9]*/state/$'
因此正则表达式可以确保
^name
[0-9]{3}
[^0-9]*
之外的任何其他字符/state/$
以“ / state /”结尾