• 正则表达式练习,持续更新中


    可访问http://tool.chinaz.com/regex ,得出以下正则表达式匹配结果

    常见正则表达式验证 
    ^(-){0,1}d+$    整数
    ^d+$            正整数
    ^-d+$           负整数
    [a-zA-Z0-9]      数字和字符 不包含标点
    [u4e00-u9fa5]  中文
    (http://|https://){0,1}[w/.?&=]+  网址
    ^[0-9]+([.][0-9]+)?$   浮点数
    ^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$ 邮箱地址
    [1-9][0-9]{14}([0-9]{2}[0-9xX])?   简单判断15位或18位身份证
    [1-9][0-9]{4,9}   判断qq号码 5-10位
    <SCRIPT LANGUAGE="JavaScript">
        <!--
            // input里面不允许包含:初中、中学、初级中学这三个词语
            var input = "C   初a中,,,高a中   初级中学";
            var r = /(?!.*初中|.*中学|.*初级中学)^.*$/;
            alert(r.test(input));
        //-->
    </SCRIPT>
    匹配两个字符 前面不为数字 后面为字母
    [^0-9][a-zA-Z]
    
    我a我2的a%$电b脑131zZ
    
    
    d 等价于 [0-9]
    w 等价于[0-9a-zA-Z]
    s  等价于[]
    量词
    d{6}    表示匹配6个连续的数字   {n}表示之前元素d必须出现n次
    d{4,7}  表示匹配4个连续数字到7个连续数字  {m,n}表示之前元素d最少出现m次,最多出现n次
    d{4,}   表示匹配等于或大于4个连续数字  {m,}表示之前的元素d最少出现m次,最多无上限
    d{0,4}  表示匹配少于或等于4个连续数字
    
    * 等价于 {0,}   之前元素可能出现,也可能不出现,出现次数无上限  
    + 等价于 {1,}   之前元素至少出现一次,出现次数无上限
    ? 等价于 {0,1}  之前元素可能不出现,最多出现一次
    量词
    d{6}    表示匹配6个连续的数字   {n}表示之前元素d必须出现n次
    d{4,7}  表示匹配4个连续数字到7个连续数字  {m,n}表示之前元素d最少出现m次,最多出现n次
    d{4,}   表示匹配等于或大于4个连续数字  {m,}表示之前的元素d最少出现m次,最多无上限
    d{0,4}  表示匹配少于或等于4个连续数字
    
    * 等价于 {0,}   之前元素可能出现,也可能不出现,出现次数无上限  
    + 等价于 {1,}   之前元素至少出现一次,出现次数无上限
    ? 等价于 {0,1}  之前元素可能不出现,最多出现一次
    
    <[^>]+>   表示匹配"<"开始和">"结束 中间不包含">"的至少一个字符的字符串
    https?  表示s可以不出现也可以出现 但最多出现一次 结果是http https都能匹配到  httpss匹配不到
    https*  表示s可以不出现也可以出现 出现次数无上限 结果是http https httpss httpss...s均可以匹配
    多选结构"|"
    ([1-9]d{14}|[1-9]d{14}d{2}[0-9X])   可粗略同时匹配15位和18位身份证
    表示匹配15位和18位身份证,如果15位 全部由数字组成,首位不能为0
    如果18位 前17位全部为数字 末位可能为数字也可能为X  首位不能为0
    基本的语法字符
    /d  0-9的数字  
    /D  /d的补集(以所以字符为全集,下同),即所有非数字的字符  
    /w  单词字符,指大小写字母、0-9的数字、下划线  
    /W  /w的补集  
    /s  空白字符,包括换行符/n、回车符/r、制表符/t、垂直制表符/v、换页符/f  
    /S  /s的补集  
    .  除换行符/n外的任意字符  
    […]  匹配[]内所列出的所有字符  
    [^…]  匹配非[]内所列出的字符  
    
    
    定位字符  
    “定位字符”所代表的是一个虚的字符,它代表一个位置,你也可以直观地认为“定位字符”所代表的是某个字符与字符间的那个微小间隙。  
    ^  表示其后的字符必须位于字符串的开始处  
    $  表示其前面的字符必须位于字符串的结束处  
    /b  匹配一个单词的边界  
    /B  匹配一个非单词的边界  
    另外,还包括:/A  前面的字符必须位于字符处的开始处,/z  前面的字符必须位于字符串的结束处,/Z  前面的字符必须位于字符串的结束处,或者位于换行符前  
    
    重复描述字符  
    “重复描述字符”是体现正则表达式“很好很强大”的地方之一:  
    {n}  匹配前面的字符n次  
    {n,}  匹配前面的字符n次或多于n次  
    {n,m}  匹配前面的字符n到m次  
    ?  匹配前面的字符0或1次  
    +  匹配前面的字符1次或多于1次  
    *  匹配前面的字符0次或式于0次  
            string str = @"@Beijing|北京|101@Shanghai|上海|102@Tianjin|天津|103@Chongqing|重庆|104@Haerbin|哈尔滨|105@Dalian|大连|106";
            Regex reg = new Regex(@"@([^|]*)|([^|]*)|([^@]*)");  //分三组
            foreach (Match m in reg.Matches(str))
            {
                string a = string.Format("{0} {1} {2}", m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value);
                Response.Write(m.Value + "<br/>");
                //Response.Write(m.Value + "<br/>");
            }
            //正则验证
            /*
                 /A     行开始位置
                 ^      行开始位置
                 /z     行结束位置
                 $      行结束位置
            */
            Regex regex = new Regex(@"Ad{4}-d{2}-d{2}z");
            string s = "2012-10-08";  //  
    2012-04-12  false
            Response.Write(regex.IsMatch(s));  //true
            Response.Write("<br/><br/>");
    
            //正则提取   数字编号
            Regex regex1 = new Regex(@"(d{4})-(d{2})-(d{2})");  //分组获取() 将匹配到4组数据
            Match match1 = regex1.Match("2012-10-08  2012-11-28");
            while (match1.Success)
            {
                Response.Write("date:" + match1.Groups[0].Value);   //2012-10-08
                Response.Write("year:" + match1.Groups[1].Value);   //2012
                Response.Write("month:" + match1.Groups[2].Value);  //10
                Response.Write("day:" + match1.Groups[3].Value);    //08
                match1 = match1.NextMatch();
                Response.Write("<br/>");
            }
            Response.Write("<br/><br/>");
    
            //正则提取   命名分组
            Regex regex2 = new Regex(@"(?<year>d{4})-(?<month>d{2})-(?<day>d{2})");  //分组获取()
            Match match2 = regex2.Match("2012-10-08  2012-11-28");
            while (match2.Success)
            {
                Response.Write("date:" + match2.Groups[0].Value);   //2012-10-08
                Response.Write("year:" + match2.Groups["year"].Value);   //2012
                Response.Write("month:" + match2.Groups["month"].Value);  //10
                Response.Write("day:" + match2.Groups["day"].Value);    //08
                match2 = match2.NextMatch();
                Response.Write("<br/>");
            }
            Response.Write("<br/><br/>");
    
            //正则替换 
            Regex regex3 = new Regex(@"(d{4})-(d{2})-(d{2})");
            string replacement3 = "$2/$3/$1";
            string text3 = "2012-10-08  2012-11-28";
            Response.Write(regex3.Replace(text3, replacement3));  //  10/08/2012 11/28/2012
            Response.Write("<br/><br/>");
    
    
            //正则替换   命令分组
            Regex regex4 = new Regex(@"(?<year>d{4})-(?<month>d{2})-(?<day>d{2})");
            string replacement4 = "${month}/${day}/${year}";
            string text4 = "2012-10-08  2012-11-28";
            Response.Write(regex4.Replace(text4, replacement4));  //  10/08/2012 11/28/2012
            Response.Write("<br/><br/>");
    
            //正则切分
            Regex regex5 = new Regex("-");
            string text5 = "2012-10-08 2012-11-28";
            foreach (string ss in regex5.Split(text5))
            {
                Response.Write(ss + "  ");  //  2012 10 08 2012 11 28
            }
        <script language="javascript" type="text/javascript">
            //验证一
            var regex = /d{4}-d{2}-d{2}/;
            document.writeln(("2012-08-12  2012-09-18".search(regex) == 0) + "<br/>");
    
            //验证二
            var regex1 = /d{4}-d{2}-d{2}/;
            document.writeln(regex1.test("2012-08-12  2012-09-18") + "<br/>")
    
            //简单提取
            var pattern = /d{4}-d{2}-d{2}/g;  // g全局标识 表示进行每个匹配 否则只匹配第一个
            var str = "2012-08-12  2012-09-18";
            var matchArray = str.match(pattern);
            for (var i = 0; i < matchArray.length; i++) {
                document.writeln(matchArray[i] + "<br/>");
            }
    
            //逐步提取
            var pattern1 = /(d{4})-(d{2})-(d{2})/g;
            var str1 = "2012-08-12  2012-09-18";
            while ((matchArray1 = pattern1.exec(str1)) != null) {
                document.writeln("date:" + matchArray1[0] + "<br/>");
                document.writeln("year:" + matchArray1[1] + "<br/>");
                document.writeln("month:" + matchArray1[2] + "<br/>");
                document.writeln("day:" + matchArray1[3] + "<br/>");
            }
    
            //简单替换
            var regex2 = /(d{4})-(d{2})-(d{2})/g;
            var replacement = "$2/$3/$1";
            document.writeln("2012-08-12".replace(regex2, replacement) + "<br/>");
    
            //正则切分
            var regex3 = /s+/;
            var matchArray2 = "1
    2	 3".split(regex3);
            for (var i = 0; i < matchArray2.length; i++) {
                document.writeln(matchArray2[i] + "<br/>");
            }
        </script>

  • 相关阅读:
    如何下载Bilibili视频
    pyqt5 主界面打开新主界面、打开Dialog、打开提示框的实现模板
    【爬坑】python3+pyqt5+pyinstaller 打包成exe的各种问题
    【PyQt5-Qt Designer】QComboBox(下拉列表框) 使用模板
    【PyQt5-Qt Designer】读取txt文件在打印
    pyqt5核心-信号与槽(第二弹)
    使用QT设计师-信号和槽signal-slot(第一弹)
    【python基础】python程序打包成.exe运行时会弹出黑框
    【pyqt5】QdateTimeEdit(日期时间)
    pyqt5-对文本样式进行操作
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234258.html
Copyright © 2020-2023  润新知