为什么运行此表达式时得到0?
SELECT 'Nr. 1700-902-8423. asdasdasd' REGEXP '1+[ ,.-/\]*7+[ ,.-/\]*0+[ ,.-/\]*0+[ ,.-/\]*9+[ ,.-/\]*0+[ ,.-/\]*2+[ ,.-/\]*8+[ ,.-/\]*4+[ ,.-/\]*2+[ ,.-/\]*3+';
当文本包含指定的数字(
17009028423
)时,我需要得到true。数字之间可以有符号,.-/\
。例如,如果我的号码是17009028423,那么当in text是:
1700-902-8423
17-00902-84.23号
170/09-0.28\423年
1700..902842-3年
17,.009028 4//2\3年
等。
谢谢。
最佳答案
正则表达式有两个问题。首先,\]
中的反斜杠转义]
的特殊含义以表示字符类。你需要避开你的反斜杠:\\]
。另一个问题是-
表示范围[
和]
(例如[a-zA-Z]
)。你也需要逃避它,或者像[a-zA-Z-]
(如@tenub所说)那样把它放在末尾。再加上反斜杠应该自己逃脱,这使得:
SELECT 'Nr. 1700-902-8423. asdasdasd' REGEXP '1[ ,./\\\\-]*7[ ,./\\\\-]*0[ ,./\\\\-]*0[ ,./\\\\-]*9[ ,./\\\\-]*0[ ,./\\\\-]*2[ ,./\\\\-]*8[ ,./\\\\-]*4[ ,./\\\\-]*2[ ,./\\\\-]*3'
你可以check for yourself。
我还删除了
+
符号,以防您只想匹配每个数字一次。