正則表達式-高速入门

1.元字符

表1.经常使用的元字符

代码 说明
. 匹配除换行符以外的随意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配随意的空白符
\d 匹配数字
\b 匹配单词的開始或结束
^ 匹配字符串的開始
$
匹配字符串的结束

注意:“(”和“)”也是元字符

2.转义字符

假设你想查找元字符本身的话。比方你查找.,或者*,就出现了问题:你没办法指定它们。由于它们会被解释成别的意思。

这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

比如:

deerchao\.net     匹配 deerchao.net

C:\\Windows       匹配 C:\Windows

3.反复

表2.经常使用的限定符

代码/语法 说明
* 反复零次或很多其它次
+ 反复一次或很多其它次
? 反复零次或一次
{n} 反复n次
{n,} 反复n次或很多其它次
{n,m}
反复n到m次

大括号表示反复次数

4.字符类

中括号表示可选择的字符集合

比如: [aeiou]           匹配不论什么一个英文元音字母

[.?!]                匹配标点符号(.或?或!)

[0-9]     
         代表的含意与\d就是全然一致的:一位数字

[a-z0-9A-Z_]  也全然等同于\w

\(?0\d{2}[) -]?\d{8}  首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0。后面跟着2个数字(\d{2}),然后是)或-或空格中的一个。它出现1次或不出现(?),最后是8个数字(\d{8})

5.分支条件

正則表達式里的分枝条件指的是有几种规则,假设满足当中随意一种规则都应该当成匹配,详细方法是用|把不同的规则分隔开。

0\d{2}-\d{8}|0\d{3}-\d{7}   这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号。8位本地号(如010-12345678)。一种是4位区号,7位本地号(0376-2233445)。

\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8} 这个表达式匹配3位区号的电话号码,当中区号能够用小括号括起来,也能够不用。区号与本地号间能够用连字号或空格间隔,也能够没有间隔。

\d{5}-\d{4}|\d{5}  这个表达式用于匹配美国的邮政编码。

美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个样例是由于它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。

\d{5}|\d{5}-\d{4}  假设你把它改成这样的话,那么就仅仅会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地測试每一个条件。假设满足了某个分枝的话。就不会去再管其他的条件了。

6.分组

用小括号来指定的子表达式叫做分组。你能够指定这个子表达式的反复次数。

(\d{1,3}\.){3}\d{1,3}   是一个简单的IP地址匹配表达式,\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个总体也就是这个分组)反复3次,最后再加上一个一到三位的数字(\d{1,3})

((2[0-4]\d|25[0-5]|[01]?

\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?

)  表示一个正确的IP地址

7.反义

有时须要查找不属于某个能简单定义的字符类的字符。比方想查找除了数字以外,其他随意字符都行的情况,这时须要用到反义:

表3.经常使用的反义代码

代码/语法 说明
\W 匹配随意不是字母。数字,下划线。汉字的字符
\S 匹配随意不是空白符的字符
\D 匹配随意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的随意字符
[^aeiou] 匹配除了aeiou这几个字母以外的随意字符

8.后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)能够在表达式或其他程序中作进一步的处理。

默认情况下。每一个分组会自己主动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

后向引用用于反复搜索前面某个分组匹配的文本。

9.贪婪与懒惰

a.当正則表達式中包括能接受反复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。

a.*b,它将会匹配最长的以a開始。以b结束的字符串。假设用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

b.懒惰匹配。也就是匹配尽可能少的字符。

前面给出的限定符都能够被转化为懒惰匹配模式,仅仅要在它后面加上一个问号?

.*?   意味着匹配随意数量的反复。可是在能使整个匹配成功的前提下使用最少的反复。

a.*?b匹配最短的,以a開始。以b结束的字符串。假设把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

參考:http://www.jb51.net/tools/zhengze.html

时间: 2024-12-24 13:22:45

正則表達式-高速入门的相关文章

Java正則表達式入门

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

Perl入门(四)Perl的正則表達式

正則表達式是Perl语言的特色.主要的语法不是非常难,可是编写一个符合需求.高效的正則表達式.还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正則表達式内容/; 作用:查找匹配内容中是否包括"正則表達式内容",假设包括返回1,否则返回0: #!user/bin/env perl -w #1... $str1 = "i like perl"; $result1 = ($str1 =~ m/perl/); print "$result1 $st

JavaScript之正則表達式入门

<html> <head><title>Js String 正則表達式</title><script>//边界符 js 中直接定义须要边界符// ?java里面不须要边界符var re = /abc/;//匹配abc的document.write(re.test("abcdabc")+","+re.test("XXXC")+"<br/>");re =/\/

UltraEdit正則表達式介绍及实例

前几天,有个将Excel中的数据导入到数据库中的需求.原本想到用程序读取Excel中的数据并存储到数据库中,但经一哥们的提醒,说用 EditPlus或UltraEdit这种工具直接将数据拼凑成SQL插入语句更easy方便,也不用写不论什么代码.因为我本人使用UltraEdit,故考 虑用UltraEdit的正則表達式来做这件事,以下是这种一个过程. 如果导入的表字段为:name,email. introduce.在Excel中的数据相应的也是这种字段.值得注意的是:在excel中的数据,比方in

JavaScript正則表達式知识汇总

Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegExp(); 3.RegExp 对象有 3 个方法: 1)test()检索字符串中的指定值,返回值是true或false. var p1=new Reg("e"); document.write(Reg.test("welcome to China!")); 2)exec

Python——正則表達式(2)

本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ====================================================================================== 3.使用正則表達式 如今.我们已经学习了一些简单的正則表達式,但我们应该怎么在Python中使用它们呢?re模块提供了一个连接正則表達式引擎的接口,同意你将RE编译成对象并利

正則表達式学习资料

正則表達式入门具体教程:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html 假设嫌上面的汉字太多,能够直接看代码:http://jqsl2012.iteye.com/blog/1262756

Java正則表達式

近期工作中常常要用到正則表達式,不得不花点时间对其进行一定的学习. JDK中提供了2个类来支持正則表達式,各自是java.util.regex.Pattern和java.util.regex.Matcher.前者表示一个模式,后者表示一个匹配器. 1.模式的两种创建方式: public static Pattern compile(String regex) { return new Pattern(regex, 0); } 或者 public static Pattern compile(St

正則表達式学习參考

正則表達式学习參考 1       概述 正則表達式(Regular Expression)是一种匹配模式,描写叙述的是一串文本的特征. 正如自然语言中“高大”.“牢固”等词语抽象出来描写叙述事物特征一样,正則表達式就是字符的高度抽象,用来描写叙述字符串的特征. 正則表達式(下面简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持,并依据自身语言的特点,进行一定的剪裁或扩展. 正则入门非常easy,有限的语法规则非常easy掌握,可是眼下正则的普及率并不高,主要是