为什么运行此表达式时得到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
我还删除了+符号,以防您只想匹配每个数字一次。

10-06 00:42