正则表达式入门(3)

本文主要参考编程教室http://crossincode.com/school/lesson/33/

1.

我们已经了解了正则表达式中的一些特殊符号,如\b、\d、.、\S等等。这些具有特殊意义的专用字符被称作“元字符”。常用的元字符还有:

\w - 匹配字母或数字或下划线或汉字(我试验下了,发现3.x版本可以匹配汉字,但2.x版本不可以)

\s - 匹配任意的空白符

^ - 匹配字符串的开始

$ - 匹配字符串的结束

2.

\S其实就是\s的反义,任意不是空白符的字符。同理,还有:

\W - 匹配任意不是字母,数字,下划线,汉字的字符

\D - 匹配任意非数字的字符

\B - 匹配不是单词开头或结束的位置

[a]的反义是[^a],表示除a以外的任意字符。[^abcd]就是除abcd以外的任意字符。

3.

之前我们用过*、+、{}来表示字符的重复。其他重复的方式还有:

? - 重复零次或一次

{n,} - 重复n次或更多次

{n,m} - 重复n到m次

正则表达式不只是用来从一大段文字中抓取信息,很多时候也被用来判断输入的文本是否符合规范,或进行分类。来点例子看看:

^\w{4,12}$

这个表示一段4到12位的字符,包括字母或数字或下划线或汉字,可以用来作为用户注册时检测用户名的规则。(但汉字在python2.x里面可能会有问题)

\d{15,18}

表示15到18位的数字,可以用来检测身份证号码

^1\d*x?

以1开头的一串数字,数字结尾有字母x,也可以没有。有的话就带上x。

另外再说一下之前提到的转义字符\。如果我们确实要匹配.或者*字符本身,而不是要它们所代表的元字符,那就需要用\.或\*。\本身也需要用\\。

比如"\d+\.\d+"可以匹配出123.456这样的结果。

一道习题:

(021)88776543

010-55667890

02584453362

0571 66345673

一个可以匹配出所有结果的表达式是

\(?0\d{2,3}[) -]?\d{7,8}

解释一下:

\(?

()在正则表达式里也有着特殊的含义,所以要匹配字符"(",需要用"\("。?表示这个括号是可有可无的。

0\d{2,3}

区号,0xx或者0xxx

[) -]?

在区号之后跟着的可能是")"、" "、"-",也可能什么也没有。

\d{7,8}

7或8位的电话号码

可是,这个表达式虽然能匹配出所有正确的数据(一般情况下,这样已经足够),但理论上也会匹配到错误的数据。因为()应当是成对出现的,表达式中对于左右两个括号并没有做关联处理,例如(02188776543这样的数据也是符合条件的。

我们可以用正则表达式中的“|”符号解决这种问题。“|”相当于python中“or”的作用,它连接的两个表达式,只要满足其中之一,就会被算作匹配成功。

于是我们可以把()的情况单独分离出来:

\(0\d{2,3}\)\d{7,8}

其他情况:

0\d{2,3}[ -]?\d{7,8}

合并:

\(0\d{2,3}\)\d{7,8}|0\d{2,3}[ -]?\d{7,8}

使用“|”时,要特别提醒注意的是不同条件之间的顺序。匹配时,会按照从左往右的顺序,一旦匹配成功就停止验证后面的规则。假设要匹配的电话号码还有可能是任意长度的数字(如一些特殊的服务号码),你应该把

|\d+

这个条件加在表达式的最后。如果放在最前面,某些数据就可能会被优先匹配为这一条件。你可以写个测试用例体会一下两种结果的不同。

关于正则表达式,介绍了正则表达式最最皮毛的一些用法。推荐一篇叫做《正则表达式30分钟入门教程》的文章,想要对正则表达式进一步学习的同学可以参考。

时间: 2024-10-03 13:09:58

正则表达式入门(3)的相关文章

正则表达式入门(c#)

本文是对该教程的学习练习 http://www.jb51.net/tools/zhengze.html 1.\bContent\b static void Main(string[] args) { string str = "Act game - Uncharted3, act Game - God of war"; Regex rex = new Regex(@"\bact\b"); var result = rex.Match(str); if (result

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处. \bHi\b     下列未进行说明的都是元字符. .  匹配除了换行符以外的任意字符. * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配.(不包含换行的字符) \bHi\b.*\bLucy\b \d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d - 不是元字符 ,只匹配它本身. 避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次). \

php正则表达式入门-常用语法格式

原文地址:http://www.jbxue.com/article/24467.html 分享下php正则表达式中的一些常用语法格式,用于匹配字母.数字等,个人感觉还不错. 语法格式:位于定界符"/"之间.较为常用的元字符包括: “+”, “*”,以及 “?”.其中, “+”元字符规定其前导字符必须在目标对象中连续出现一次或多次, “*”元字符规定其前导字符必须在目标对象中出现零次或连续多次, 而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次. /jim{2,6}/<

Python正则表达式入门

Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上可能不如str自带的方法, 但功能十分强大. 得益于这一点, 在提供了正则表达式的语言里, 正则表达式的语法都是一样的, 区别只在于不同的编程语言实现支持的语法数量不同; 但不用担心, 不被支持的语法通常是不常用的部分. 如果已经在其他语言里使用过正则表达式, 只需要简单看一看就可以上手了. 下图展

有shi以来最详细的正则表达式入门教程

原文:有shi以来最详细的正则表达式入门教程 本篇文章文字内容较多,但是要学习正则就必须耐心读下去,正则表达式是正则表达式其实并没有想像中的那么困难,但是想要熟练的掌握它,还是需要下功夫勤加练习的.这里讲一些正则表达式的语法和学习方法,大家还要多参考前辈们写的正则表达式,才能达到熟练精通的地步. 一.正则表达式到底是什么东西?                                                  正则表达式,又称正规表示法.常规表示法(英语:Regular Expre

正则表达式入门教程&amp;&amp;经典Javascript正则表达式----share

前言 例子: ^[email protected]+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 一个学习正则表达式不错的教程,对正则表达式有兴趣,但不太了解的童鞋可以参考下 以下内容摘自 常用JQuery数字类型验证正则表达式整理  和    经典Javascript正则表达式         [  留个备份 :) ~~  ]     常用JQuery数字类型验证正则

JavaScript正则表达式详解(一)正则表达式入门

JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望对于大家学习JavaScript正则表达式有一定的帮助. 建立正则表达式对象语法 re = new RegExp(/pattern/[flags]) flags 参数说明: g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找) 普通字符 描述 \ 将下一个字符标记为一个特

Python 正则表达式入门

Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写.转载请写明出处 中级篇介绍子表达式,向前向后查找,回溯引用 链接:http://www.cnblogs.com/chuxiuhong/p/5907484.html 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符

js中的正则表达式入门

js中的正则表达式入门 什么是正则表达式呢? 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串.将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等. 说白了正则表达式就是处理字符串的,我们可以用它来处理一些复杂的字符串. 为什么要学习正则表达式 我们直接用一个例子来说明 //找出这个字符串中的所有数字 var str = 'abc123de45fgh6789qqq111'; //方法1 function findNum

Java正则表达式入门

众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.  自从jdk1.4