正则表达式(转载)

1、正则表达式的知识要点

1、正则表达式是什么?

正则表达式是一种可以用于模式匹配和替换的强有力的工具。

2、正则表达式的优点?

更少的代码,更高的效率。

3、正则表达式如何使用?

在下面的教程中我们将学习到正则表达式的用法。

4、正则表达式的缺点?

需要花一定的时间学习,这个时间由个人决定,一天或者更久一些。

2、正则表达式的各种符号及其含义

常用的符号 . 表示任意一个字符

\s 空格字符(空格键, tab, 换行, 换页, 回车)

\S 非空格字符([^\s])

\d 一个数字,(相当于[0-9]  )

\D  一个非数字的字符,(相当于[^0-9] )

\w 一个单词字符(word character) (相当于 [a-zA-Z_0-9] )

\W 一个非单词的字符,[^\w]

^ 一行的开始

$ 一行的结尾

\b 一个单词的边界

\B 一个非单词的边界

\G 前一个匹配的结束

[] 匹配方括号内的一个字符

例如:[abc] 表示字符a,b,c中的任意一个(与a|b|c相同)

[a-zA-Z] 表示从a到z或A到Z当中的任意一个字符

表示次数的符号 * 重复零次或更多次

例如:a* 匹配零个或者多个a

+ 重复一次或更多次

例如:a+ 匹配一个或者多个a

? 重复零次或一次

例如:a? 匹配零个或一个a

{n} 重复n次

例如:a{4} 匹配4个a

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

例如:a{4,} 匹配至少4个a

{n,m} 重复n到m次

例如:a{4,10} 匹配4~10个a

2JAVA正则表达式实例教程                                                         12/11/2008

3、正则表达式实例

java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现:

1、首先引入java包:java.util.regex

2、使用方法如下:

共分三步:

①构造一个模式.

Pattern p=Pattern.compile("[a-z]*");

②建造一个匹配器

Matcher m = p.matcher(str);

③进行判断,得到结果

boolean b = m.matches();

Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到

时返回true,没匹配到则返回false

①m.matches()

matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

②m.lookingAt()

lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返

回true

③m.find()

find()对字符串进行匹配,匹配到的字符串可以在任何位置

Matcher类的其他方法

int groupcount() 返回此匹配器模式中的捕获组数。

String replaceAll(String replacement) 用给定的replacement全部替代匹配的

部分

String repalceFirst(String replacement) 用给定的replacement 替代第一次匹

配的部分

appendReplacement(StringBuffer sb,String replacement)  根 据 模 式 用

replacement替换相应内容,并将匹配的结果添加到sb当前位置之后

StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串

添加到sb当前位置之后.

group(n) 0代表永远都是匹配整个表达式的字符串的那部分 n<>0时代表

第n组匹配的部分

①字符匹配

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m.matches(); //返回是否匹配的结果

System.out.println(b);

Pattern p = Pattern.compile(expression); // 正则表达式

3JAVA正则表达式实例教程                                                         12/11/2008

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m. lookingAt (); //返回是否匹配的结果

System.out.println(b);

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m..find (); //返回是否匹配的结果

System.out.println(b);

②分割字符串

Pattern pattern = Pattern.compile(expression); //正则表达式

String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组

③替换字符串

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(text); // 操作的字符串

String s = m.replaceAll(str); //替换后的字符串

④查找替换指定字符串

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(text); // 操作的字符串

StringBuffer sb = new StringBuffer();

int i = 0;

while (m.find()) {

m.appendReplacement(sb, str);

i++;    //字符串出现次数

}

m.appendTail(sb);//从截取点将后面的字符串接上

String s = sb.toString();

⑤查找输出字符串

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(text); // 操作的字符串

while (m.find()) {

//m.start() 返回匹配到的子字符串在字符串中的索引位置.

//m.end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.

//m.group()返回匹配到的子字符串

}

4JAVA正则表达式实例教程                                                         12/11/2008

3、下面通过几个例子来理解一下正则表达式的妙用

3.1 匹配字符串(matches()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示首字母是a,中间是任意字符,结尾以b结束

//不匹配的结果

p = Pattern.compile("a*b");

m = p.matcher("baaaaab");

b = m.matches();

System.out.println("匹配结果:"+b); //输出:true

//匹配的结果

p = Pattern.compile("a*b");

m = p.matcher("aaaaab");

b = m.matches();

System.out.println("匹配结果:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

5JAVA正则表达式实例教程                                                         12/11/2008

3.2 判断手机号码(matches()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示第一位是1,第二位为3或5,结尾为9位数字的一串数字

p = Pattern.compile("^[1][3,5]+\\d{9}");

m = p.matcher("13812345678");

b = m.matches();

System.out.println("手机号码正确:"+b); //输出:true

//

p = Pattern.compile("[1][3,5]+\\d{9}");

m = p.matcher("03812345678");//错误  首位为0

//m = p.matcher("13812345-7a");//错误  字符串中有字母或者字符

b = m.matches();

System.out.println("手机号码错误:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

6JAVA正则表达式实例教程                                                         12/11/2008

3.3 身份证号码验证

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示15位或者18位数字的一串数字

p = Pattern.compile("\\d{15}|\\d{18}");

m = p.matcher("120101198506020080");

b = m.matches();

System.out.println("身份证号码正确:"+b); //输出:true

//

p = Pattern.compile("\\d{15}|\\d{18}");

m = p.matcher("020101198506020080");//错误  首位为0

b = m.matches();

System.out.println("身份证号码错误:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

7JAVA正则表达式实例教程                                                         12/11/2008

3.4 email验证

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示邮箱号码

p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*");

m = p.matcher("[email protected]");

b = m.matches();

System.out.println("email号码正确:"+b); //输出:true

//

p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*");

m = p.matcher("user.test.com");//错误  @应为.

b = m.matches();

System.out.println("email号码错误:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

8JAVA正则表达式实例教程                                                         12/11/2008

3.5 IP地址检查

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示邮箱号码

p =

Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");

m = p.matcher("192.168.1.1");

b = m.matches();

System.out.println("IP正确:"+b); //输出:true

//

p =

Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");

m = p.matcher("192.168.1.1234");//错误  应该为3位不应该是4位

b = m.matches();

System.out.println("IP错误:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

9JAVA正则表达式实例教程                                                         12/11/2008

3.6 中文名

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //正则表达式

Matcher m = null; //操作的字符串

boolean b = false;

//正则表达式表示汉字的一串字符串

p = Pattern.compile("^[\u4e00-\u9fa5]+$");

m = p.matcher("貂禅");

b = m.matches();

System.out.println("中文名正确:"+b); //输出:true

//

p = Pattern.compile("^[\u4e00-\u9fa5]+$");

m = p.matcher("nick");//错误  只能是中文

b = m.matches();

System.out.println("中文名错误:"+b); //输出:false

}

public static void main(String argus[]){

test();

}

}

10JAVA正则表达式实例教程                                                         12/11/2008

3.7 字符串匹配的返回

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

/**

* start()返回匹配到的子字符串在字符串中的索引位置.

* end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.

* group()返回匹配到的子字符串

*/

Pattern p=Pattern.compile("\\d+");

Matcher m=p.matcher("aaa2223bb11222");

while(m.find()){

System.out.println(m.start());//第一个循环返回3,第二个循环返回

9

System.out.println(m.end());//返回7,第二个循环返回14

System.out.println(m.group());//返回2233,第二个返回11222

}

}

public static void main(String argus[]) {

test();

}

}

11JAVA正则表达式实例教程                                                         12/11/2008

3.8 groupCount、group()、group(n)的用法

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

/*

* 本例groupCount将返回三组a11bbb、11、bbb

*/

Pattern p=Pattern.compile("\\w(\\d\\d)(\\w+)");

Matcher m=p.matcher("aa11bbb");

if(m.find()){

int count = m.groupCount(); //返回匹配组的数目,而不是匹配字符串

的数目

for(int i = 0; i <= count; i++)

System.out.println("group " + i + " :" + m.group(i));

}

}

/*

* 返回结果如下

* group 0 :a11bbb

* group 1 :11

* group 2 :bbb

*/

public static void main(String argus[]) {

test();

}

}

12JAVA正则表达式实例教程                                                         12/11/2008

3.9 分割字符串(split ()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p=Pattern.compile("\\d+"); //将所含数字去掉

String str[] = p.split("aa11bbb33cc55gg");

for (int i = 0; i < str.length; i++) {

System.out.println(str[i]);

}

}

/*

* 返回结果如下

* aa

* bbb

* cc

* gg

*/

public static void main(String argus[]) {

test();

}

}

13JAVA正则表达式实例教程                                                         12/11/2008

3.10 字符串替换(replaceAll()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p = Pattern.compile("\\d+"); //将所含数字全部替换为XX

Matcher m = p.matcher("aa11bbb33cc55gg");

String str = m.replaceAll("XX");

System.out.println(str);

}

/*

* 返回结果如下

* aaXXbbbXXccXXgg

*/

public static void main(String argus[]) {

test();

}

}

14JAVA正则表达式实例教程                                                         12/11/2008

3.11 字符串替换2(appendReplacement()方法及appendTail()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p = Pattern.compile("55");

Matcher m = p.matcher("aa11bbb33cc55gg55yy");

StringBuffer sb = new StringBuffer();

while (m.find()) {

m.appendReplacement(sb, "@@");//用@@替换所有的55

}

System.out.println(sb.toString());//打印[email protected]@[email protected]@

m.appendTail(sb);//将最后一次替换后的字符串加上

System.out.println(sb.toString());//打印[email protected]@[email protected]@yy

}

/*

* 返回结果如下 [email protected]@[email protected]@、[email protected]@[email protected]@yy

*/

public static void main(String argus[]) {

test();

}

}

15JAVA正则表达式实例教程                                                         12/11/2008

4、常用的正则表达式

//email 正确的书写格式为 [email protected]

static String _email  = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*";

//电话 正确格式 012-87654321、0123-87654321、0123-7654321

static String _tel    =

"\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";

//手机号码 13187654321 13587654321

static String _phone  = "^[1][3,5]+\\d{9}";

//汉字 中国

static String _chinse = "^[\u4e00-\u9fa5]+$";

//IP 192.168.1.1

static String _ip     =

"\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";

//QQ 456789

static String _qq     = "[1-9][0-9]{4,13}";

//邮编 210000

static String _mail   = "[1-9]\\d{5}(?!\\d)";

//身份证号码 15或者18位

static String _id     = "\\d{15}|\\d{18}";

时间: 2024-10-15 04:29:49

正则表达式(转载)的相关文章

iOS之正则表达式(转载)

一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* number=@"^[0-9]+$"; NSPredicate *numberPre = [NSPre

常用正则表达式(转载收藏)

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码: var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/; var r = fieldValue.match(reg); if(r==null)alert('Date

正则表达式——转载

Java判断时间,Email,手机号,身份证等是否为正确格式 //=====================判断时间是否正确格式 public static boolean checkDate(String date,String format) ...{        DateFormat df = new SimpleDateFormat(format);        Date d = null;        try...{            d = df.parse(date); 

javascript中正则表达式的基础语法

× 目录 [1]定义[2]特点[3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当重要的知识,本文将介绍正则表达式的基础语法 定义 正则表达式(Regular Expression)是一门简单语言的语法规范,是强大.便捷.高效的

正则表达式(上)

内容提纲: 1.什么是正则表达式 2.创建正则表达式  转载请注明出处,谢谢! 假设用户需要在HTML表单中填写姓名.地址.出生日期等.那么在将表单提交到服务器进一步处理前,JavaScript程序会检查表单以确认用户确实输入了信息并且这些信息是符合要求的.这时候就需要用到正则表达式. 一.什么是正则表达式 正则表达式(regular expression)是一个描述字符模式的对象.ECMAScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模

5-python自动化-day05

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 转载: http://www.cnblogs.com/alex3714/articles/5161349.html 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来

知道这20个正则表达式,能让你少写1,000行代码[转载]

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码: var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/; var r = fieldValue.match(reg); if(r==null)alert('Date

正则表达式问题:如何理解/href\s*=\s*(?:&quot;(?&lt;1&gt;[^&quot;]*)&quot;|(?&lt;1&gt;\S+))/(转载)

ms-help://MS.VSCC/MS.MSDNVS.2052/jscript7/html/jsjsgrpregexpsyntax.htm 该文虽有解释, 但没有样例,对我这样的初学者来说很难理解 在msdn上看到:href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+)),该正则表达式匹配字符串中的形如href="..."的链接.msdn没有解释该表达式的语法, 以下是我初步的问题 1. (?:"(.

【转载】Python中的正则表达式教程

本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现

深入浅出之正则表达式(二)转载http://www.cnblogs.com/dragon/archive/2006/05/09/394923.html

深入浅出之正则表达式(二) 前言:       本文是前一片文章<深入浅出之正则表达式(一)>的续篇,在本文中讲述了正则表达式中的组与向后引用,先前向后查看,条件测试,单词边界,选择符等表达式及例子,并分析了正则引擎在执行匹配时的内部机理.        本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载.但是为了尊重原作者和译者的劳动,请注明出处!谢谢!   9.      单词边界 元字符<<\b>>也是一种对位置进行匹