用于通配符查找的正则表达式帮助
Regex Help for wildcard lookup
我在使用此通配符查找时遇到问题,不确定为什么这不起作用:
我正在查找示例销售代理 42。正如您想象的那样,作为销售人员,他们并不真正关心垃圾输入 = 垃圾输出。所以他们的代理代码通常是乱七八糟的。
代理 42 的有效示例:
- 42
- 30-42-22-假期
- 42复活节
- 42-优惠券
- 42优惠券-423355
- 29-42sale-52
明确需要不显示的无效示例
- A4290042
- 4297901
- 42cmowc209d
- o203f9j42po0
这是我想出的最成功的模型:
SELECT company_id, agent
FROM cust_data
WHERE (agent = ('42') OR agent LIKE ('42%-%') OR agent LIKE ('%-%42') OR agent LIKE ('%-%42%-%') OR agent LIKE ('42[a-z]%-%') OR agent LIKE ('%-%42[a-z]%') OR agent LIKE ('%-%42[a-z]%-%') OR agent LIKE ('42[a-z]%'))
我得到了大部分有效的 return 和 none 的无效的,但我似乎仍然无法抓住像 42[ 这样的例子=50=]easter 或 29-42sale-52 即使我告诉它抓住那种风格...
有什么建议吗?
如果你需要匹配没有被数字包围的42
,你可以使用anchors(^
代表字符串的开始,$
代表字符串的结束)和取反字符类:
WHERE agent ~ '(^|[^0-9])42($|[^0-9])'
解释:
(^|[^0-9])
- 字符串的开头 ^
或非数字 [^0-9]
42
- 文字 42
($|[^0-9])
- 字符串结尾 $
或非数字 [^0-9]
我在使用此通配符查找时遇到问题,不确定为什么这不起作用:
我正在查找示例销售代理 42。正如您想象的那样,作为销售人员,他们并不真正关心垃圾输入 = 垃圾输出。所以他们的代理代码通常是乱七八糟的。
代理 42 的有效示例:
- 42
- 30-42-22-假期
- 42复活节
- 42-优惠券
- 42优惠券-423355
- 29-42sale-52
明确需要不显示的无效示例
- A4290042
- 4297901
- 42cmowc209d
- o203f9j42po0
这是我想出的最成功的模型:
SELECT company_id, agent
FROM cust_data
WHERE (agent = ('42') OR agent LIKE ('42%-%') OR agent LIKE ('%-%42') OR agent LIKE ('%-%42%-%') OR agent LIKE ('42[a-z]%-%') OR agent LIKE ('%-%42[a-z]%') OR agent LIKE ('%-%42[a-z]%-%') OR agent LIKE ('42[a-z]%'))
我得到了大部分有效的 return 和 none 的无效的,但我似乎仍然无法抓住像 42[ 这样的例子=50=]easter 或 29-42sale-52 即使我告诉它抓住那种风格...
有什么建议吗?
如果你需要匹配没有被数字包围的42
,你可以使用anchors(^
代表字符串的开始,$
代表字符串的结束)和取反字符类:
WHERE agent ~ '(^|[^0-9])42($|[^0-9])'
解释:
(^|[^0-9])
- 字符串的开头^
或非数字[^0-9]
42
- 文字42
($|[^0-9])
- 字符串结尾$
或非数字[^0-9]