c# 正则表达式疑问

难以理解为什么是空

相关代码

using System;
using System.Text.RegularExpressions;
 
public class Test
{
    public static void Main()
    {
        string str;
        str="1898489632";
        Regex phoneRegex = new Regex("^1[34578]{9}$");
        Console.WriteLine(phoneRegex.Match(str)); //=>null
    }
}

希望能够匹配出来

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2.2k
3 个回答
^1[34578]{9}$

这个正则表达式表示匹配数字 1 开头,后面有9个数字,这九个数字是 3、4、5、7、8 中的一个。
所要匹配的字符串是 1898489632。
这个字符串包含了 2、6,这几个数字不是 3、4、5、7、8 中的一个,所以不匹配。

可以把 new Regex("^1[34578]{9}$") 改成 new Regex("^1[0-9]{9}$") 试一下。
[0-9] 表示匹配 0 到 9 之间的一个数字,可以匹配到任意单个数字。

如下图,你写的正则,不能匹配9、6、2这三个数字,所以匹配失败
ph.png
按照你写的,我猜你是要^1[34578]\d{8}$
但是你写的又很像是要校验手机号码,如果是手机号码的话,就得再改一下了,因为手机号码是11位,而你目前写的只有10位,手机校验如下:
^1[34578]\d{9}$
如果不需要严格校验的话,其实这么写就可以了:^1\d{10}$

首先 看样子你是要匹配手机号,然而 1898489632 长度只有10 并不是手机号。
另外^1[34578]{9}$的意思是 1开头,后面[34578]{9}表示3,4,5,7,8这5个数字任意出现9次。所以无法匹配1898489632
我猜测你应该是要写1开头第二位是[34578],然后后面9个数字。
正确的写法是 ^1[34578][0-9]{9}$ 或者 ^1[34578]\d{9}$ 。其中\d就是表示数字[0-9]
另外考虑到号段可能新增,^1\d{10} 可能会比较通用写。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进