我有一个MySQL查询来查找以+1开头的10位电话号码
SELECT blah
FROM table
WHERE phone REGEXP'^\\+[1]{1}[0-9]{10}$'
如何进一步过滤此REGEXP以仅搜索某些3位数字的区号? (即共享美国号码格式的国际10位数电话号码)
我尝试使用IN子句,即。 IN('+1809%','+1416%')
,但语法错误结束
WHERE phone REGEXP'^\\+[1]{1}[0-9]{10}$' IN('+1809%','+1416%')
答案 0 :(得分:1)
您可以在此处将grouping construct与alternation operator一起使用,例如
REGEXP '^\\+1(809|416)[0-9]{7}$'
^^^^^^^^^
只需从10中减去3即可匹配尾随数字。请注意,在8.x之前的MySQL版本中,您不能使用非捕获组,而只能使用捕获组。
此外,[1]{1}
模式等于1
,因为每个模式默认情况下精确匹配一次(即{1}
总是多余的),因此使用字符类{ {1}}内只包含一个符号,是指两个或多个符号,或避免转义一些符号,但是[...]
不必转义,因为它是一个字符char,因此方括号是这里完全多余。