关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781

目录(?)[+]

因为小宝鸽正则表达式用得不多,一般也就网上找找js验证手机号、邮箱、qq、身份证号码的正则表达式,然后使用。那些正则表达式,看着似懂非懂的样子,始终存在一些疑问,几番想系统学习一下正则表达式,但是那些疑惑就像修仙大道的心结,让我正则表达式水平毫无存进。最近刚好有这样的时间把这些问题弄明白,并且对正则表达式有了入门的理解。

(1)为什么很多JavaScript正则表达式串都是以“/”开头并且以“/”结尾?

其实这是一种正则表达式的隐式构造方式.

JavaScript里面,一般有两种构造方式

1、用两斜杠将正则表达式夹在中间。 
例:var reg = /\w+/;

2、使用new来创建。 
例:var reg = new RegExp(“\\w+”); 
注意:这里的\\w是双斜杠,因为\本来就是字符串的转义字符,这里就经过了两次转义了。

第二种是正则对象的显式构造方法。

因此,如果你采用显式构造方法一定记得把前后的/去掉哦,不然,哼。

(2)为什么很多JavaScript正则表达式串都用^和$包含着正则表达式串

因为^ 和 $ 语言元素与输入字符串的开头和结尾匹配。 
^表示必须以什么开头 
$表示必须以什么结尾

^表示必须以什么开头,这个好理解,关于$我们看下面的例子:

如我们想匹配以1开头,后面跟着10数字(类似与手机号的弱验证) 
那么我们正则表达式串可以这样:^[1][\d]{10}$ 
如果我们校验字符串为: 
14564564564564654654654564654 //不匹配 
14564564564 //匹配

如果我们把正则表达式最后面的$去掉:^[1][\d]{10}, 
结果是这样: 
14564564564564654654654564654 //匹配 
14564564564 //匹配

如图:





(3)正则表达式除了用来验证下手机号码、身份证号码,还能干什么?

正则表达式的用途

1、数据验证,例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

2、替换文本,可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

3、基于模式匹配从字符串中提取子字符串,可以查找文档内或输入域内特定的文本。

关于,数据验证,没什么好说的,就是平时那些js验证手机号啊,邮箱啊什么的,这里就不说了。

下面关于提取子字符串和替换文本,我们以Java为例,为什么是Java?谁让Java是世界上最好的语言呢!是它,就是它,咳咳,客观请看:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static void main(String[] args) {
        //把   第“数字"条  全部查找出来然后换成   小宝鸽
        String regex = "第[0-9]*条";
        String str = "第9条,数据错误,错误信息,第jjj哦条哦条我的条件如何?第221条xx";
        System.out.println(str);
        Pattern pat = Pattern.compile(regex);
        Matcher matcher = pat.matcher(str);
        while (matcher.find()) {
            String temp = str.substring(matcher.start(), matcher.end());
            str = str.replaceAll(temp, "小宝鸽");
        }
        System.out.println(str);

        //直接替换了
        str = "第9条,数据错误,错误信息,第jjj哦条哦条我的条件如何?第221条xx";
        System.out.println(str);
        str = str.replaceAll(regex, "小宝鸽");
        System.out.println(str);
    }
}

提取子字符串和替换文本的例子都在上面的例子代码里面体现啦

运行结果:

(4)正则表达式内容不少,想要短时间全部掌握不可能,入门需要学习哪些呢?

下面,我们先简单了解下这些语法: 
字符匹配:

字符 描述
\d 匹配数字(0~9)
\D 匹配非数字
\w 匹配任意单字符
\W 匹配非单字符
\s 匹配空白字符
\S 匹配非空字符
. 匹配除换行符 \n之外的任何单字符。
[…] 匹配括号中任意字符
[^…] 匹配非括号字符


重复匹配:

字符 描述
{n} 匹配n次字符
{n,} 匹配n次和n次以上
{n,m} 匹配n次上m次下
? 匹配0或1次
+ 匹配一次或多次
* 匹配0次以上
| 指明两项之间的一个选择。要匹配 |,请使用 \|


字符定位:

字符 描述
^ 定位后面模式开始位置
$ 前面模式位于字符串末端
\A 前面模式开始位置
\z 前面模式结束位置
\Z 前面模式结束位置(换行前)
\b 匹配一个单词边界
\B 匹配一个非单词边界


转义匹配:

字符 描述
“\”+实际字符 \ . * + ? | ( ) { }^ $
\n 匹配换行
\r 匹配回车
\t 匹配水平制表符
\v 匹配垂直制表符
\f 匹配换页
\nnn 匹配一个8进制ASCII
\xnn 匹配一个16进制ASCII
\unnnn 匹配4个16进制的Uniode
\c+大写字母 匹配Ctrl-大写字母


上面的语法来自于博文:http://www.cnblogs.com/moss_tan_jun/archive/2010/08/15/1800281.html

上面的语法可能有些比较抽象,没有看懂并没有关系,日后用到在逐个研究。

了解了上面的语法之后我们来看看这些例子:

让我们开始第一个验证,输入的字符在a-g之间?

[a-g]

输入的字符在a-g之间并且长度为3?

[a-g]{3}

输入的字符在a-g之间并且最大长度为3最小长度为1?

[a-g]{1,3}

我如何在匹配像91230456, 01237648那样的固定8位数?

^[0-9]{8}$

验证像INV190203 或 inv820830那样的前3位是不区分大小写的英文字母,剩余8位是数字

在前面的表达式中只能匹配前3个是小写英文字母的发票编号,如果我们输入大写字母那就不能匹配了。所以为了确保前3个字母是不区分大小写的,我们就要用表达式^[a-zA-Z]{3}。

完整的正则式如下:

^[a-zA-Z]{3}[0-9]{7}$

我们可以验证简单的网址URL格式吗?

第一步:检查是否存在

^www.

第二步:域名必须是长度在1-15的英文字母:

.[a-z]{1,15}

第三部:以.com或者.org结束:

.(com|org)$

完整的表达式如下:

^www[.][a-z]{1,15}[.](com|org)$

让我们在来看看BCD(其实也就是上面说的3条基本语法)如何验证email格式

第一步:email开始是长度在1-10的英文字母,最后跟一个”@”:

^[a-zA-Z0-9]{1,10}@

第二步:@后面是长度在1-10的英文字母,后面跟一个”.”:

[a-zA-Z]{1,10}.

第三步:最后以.com或.org结束:

.(com|org)$

最后完整的表达式如下:

^[a-zA-Z0-9]{1,10}@[a-zA-Z]{1,10}.(com|org)$

以上正则例子出自博文:http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html,该博文还有日期验证的例子。

上面的一些例子可能看官们能看到懂,但是自己不动手试试,还是不放心,因此下面推荐两个在线测试正则表达式网站,可以验证上面的例子!

正则表达式在线测试网站,这两个网站都可以,挺好用的,但是个人还是推荐前者(虽然界面没有那么美观): 
http://tool.chinaz.com/regex/ 
http://tool.oschina.net/regex/

博主的正则表达式只是入门,如果上文有任何不正确的地方望评论纠正,不胜感激!

时间: 2024-09-12 07:05:43

关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)的相关文章

求正则高手,指点一下判断角度的正则验证

问题描述 比如 0~360 当为一位数的时候可以是0~9 当是两位数时 其实左边第一位肯定不能为0 当时三位数时 左边第一位是1~3 中间第二位是0~5 第三位还是0~9 也允许360 整数后也能跟两位小数我有一个 但是用不起的感觉呢 求指导^((\d|[1-9]\d|[1-2]\d\d|3[0-5]\d|360),){2}(\d|[1-9]\d|[1-2]\d\d|3[0-5]\d|360)(\.[0-9]{2})$不甚感激 解决方案 ^((3(60|[0-5][0-9]))|([1-2][0

正则文章内容中img图片地址与正则内容中的a连接地址

 代码如下 复制代码   $body ='<img src="Image/2009112422220515.gif" alt="楼盘网loupan"  border="0" />';   $Link ='fdas<a href="http://www.111cn.net" target="_blank">网页制作教程教程</a>';   $array ="aa,

PHP中正则的使用

正则表达式,作为一种快速.便捷的处理字符串的工具,在各种编程语言中都有着广泛的用途,通过在PHP中的一些使用,下面记录一下关于PHP中正则使用的一些技巧. 我的正则入门,是起源于网上的一篇文章[1],这篇文章由浅入深的阐述了正则使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高. 正则表达式: 用

史上最全正则

一个正则表达式测试(只可输入中文.字母和数字)       在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到.之前在用java时特别是对用户名或密码使用正则非常爽,写脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够.这里就罗列了从网上找的很有用的资料,感谢大神们的贡献. 首先举一个例子: 匹配9-15个由字母/数字组成的字符串的正则表达式: NSString * regex = @"^[A-Za-z0-9]{9,15}$"

正则表达式学习参考 正则入门学习资料_正则表达式

1 概述 正则表达式(Regular Expression)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中"高大"."坚固"等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽象,用来描述字符串的特征. 正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持,并根据自身语言的特点,进行一定的剪裁或扩展. 正则入门很容易,有限的语法规则很容易掌握,但是目前正则的普及率并不高,主要是因为正则的流派众多,各种宿

正则基础之 神奇的转义_正则表达式

1 概述这或许会是一个让人迷惑,甚至感到混乱的话题,但也正因为如此,才有了讨论的必要.在正则中,一些具有特殊意义的字符,或是字符序列,被称作元字符,如"?"表示被修饰的子表达式匹配0次或1次,"(?i)"表示忽略大小写的匹配模式等等.而当这些元字符被要求匹配其本身时,就要进行转义处理了.不同的语言或应用场景下,正则定义方式.元字符出现的位置不同,转义的方式也是林林总总,不一而同.2 .NET正则中的字符转义2.1     .NET正则中的转义符绝大多数语言中,&qu

正则-js里怎么判断电子邮箱的格式

问题描述 js里怎么判断电子邮箱的格式 在输入电子邮箱后,怎么判断输入的是否正确?用正则?那该怎么写呢 解决方案 可以参考下这个 http://www.cnblogs.com/freespider/archive/2010/11/10/1873800.html 解决方案二: 知道正则了还问怎么写,,网上学一下正则了,,人家给你一个正则换一个你又不会了 很简单的 解决方案三: http://www.cnblogs.com/yejianfei/archive/2012/10/18/2729417.h

ASP.NET中 RegularExpressValidator(正则验证)的使用

原文:ASP.NET中 RegularExpressValidator(正则验证)的使用 ylbtech-ASP.NET-Control-Validator: RegularExpressValidator(正则验证)的使用  ASP.NET中 RegularExpressValidator(正则验证)的使用. 1.A,运行效果返回顶部 RegularExpressionValidator:正则验证 属性: ControlToValidate:要验证的控件 ErrorMessage:错误提示信息

救命的正则问题

问题描述 很久没碰正则的所以希望可以帮我解答个正则的题目:这是一段测试<b>文字</>,现在要匹配第一个包含"文字"两个字,但是可能也有包含了<b>文字</b>的项但这种情况下不匹配只匹配没有标签的文字.然后替换"文字"为<b>文字</b>,谢谢.匹配替换结果结果:这是一段测试<b>文字</>,现在要匹配第一个包含"<b>文字</>&qu