文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:39
字数 1799
阅读 0
收藏 0

可访问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(@"\A\d{4}-\d{2}-\d{2}\z");
        string s = "2012-10-08";  //  \n2012-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\n2\t 3".split(regex3);
        for (var i = 0; i < matchArray2.length; i++) {
            document.writeln(matchArray2[i] + "<br/>");
        }
    </script>

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/10342419

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
数据挖掘工作所需技能—正则表达式

由于这两天所做的项目涉及到了文本分析的内容,并在处理脏乱文本(就是做一个词云图,要把英文、一些标点符号之类的给清除掉)时使用了正则表达式,所以特别来总结下。在以后的一段日子里,我会...

凡人求索
2017/12/24
0
0
正则表达式的用法

grep grep的主要作用就是文本过滤,在Linux中还是很好用的,自我感觉学这个是很有意思的,也很有用,刚学的时候可能会感觉它的用法很简单,但是再往后学习,你会喜欢上这个命令的,因为它确实...

Queencxj112
2017/06/04
0
0
shell学习之正则表达式【基础篇】

什么是正则表达式: 是你定义的、linux工具用来过滤文本的模式模板。Linux工具(比如sed编辑器或gawk)能够在数据流向工具时对数据进行正则表达式模式匹配。如果数据匹配模式,它就会被接受并...

白羊IT
2017/04/15
0
0
nginx location的匹配规则

nginx location的匹配规则 Run - 学习练习复习2017-02-2639 阅读 匹配nginxlocation规则 location匹配命令 ~ 执行正则表达式,区分大小写 ~* 执行正则表达式,不区分大小写 ^~ 表示普通字符...

Run - 学习练习复习
2017/02/26
0
0
黑马程序员——正则表达式篇

------- android培训、java培训、期待与您交流! ---------- 正则表达式:符合一定规则的表达式。 作用:用于专门操作字符串。 特点:用一些特定的符合来表示一些代码操作,这样就简化书写。...

optimisticpig
2014/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
10
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部