我在数据库中有一列phone_number
,其中一个条目可能包含多个电话号码。该计划是识别未通过正则表达式验证的条目。
这是我用来实现目标的查询:
SELECT id, phone_number FROM store WHERE phone_number NOT REGEXP '^\s*\(?(020[78]?\)? ?[1-9][0-9]{2,3} ?[0-9]{4})|(0[1-8][0-9]{3}\)? ?[1-9][0-9]{2} ?[0-9]{3})\s*$';
问题是,每次运行代码时,都会收到错误:
错误代码:1139。从正则表达式中收到错误“重复运算符操作数无效”
提前致谢。
最佳答案
您使用的正则表达式至少有两个问题:1)转义应该加倍,2)有 2 个组用 |
分隔,使得 ^
和 $
分别应用于两个分支。
'^\s*\(?(020[78]?\)? ?[1-9][0-9]{2,3} ?[0-9]{4})|(0[1-8][0-9]{3}\)? ?[1-9][0-9]{2} ?[0-9]{3})\s*$'
^--------------------------------------^ ^------------------------------------------^
你可以使用
'^[[:space:]]*\\(?(020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4}|0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3})[[:space:]]*$'
分割:
^
- 字符串开头[[:space:]]*
- 0+ 个空格\\(?
- 1 或 0(
个字符(020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4}|0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3})
- 匹配 2 个替代项的替代组:020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4}
-020
+ 可选的7
或8
+ 一个可选的)
+ 一个可选的空格 + 一个从1
到9
的数字 + 3 或 2 位数字 + 一个可选空格+4位数字|
- 或0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3}
-0
+ 一个从1
到8
+ 3 位数字 + 可选的)
+ 可选的空格 + 从1
到9
的数字 + 2 位数字 +可选空格 + 3 位数字
[[:space:]]*
- 0+ 个空格$
- 字符串结尾
关于mysql - 从正则表达式收到错误 'repetition-operator operand invalid'(错误#1139),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369092/