正则表达式基础用法

正则表达式:符合一定规则的表达式,用特定符号来表达一些代码。

特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写

作用:专门用于操作字符串。

优点:可以简化对字符串的复杂操作。

缺点:符号定义越多,正则表达式越长,阅读性越差

正则表达式的构造摘要

1. 字符

\\                 反斜线字符

\t                 制表符 (‘\u0009‘)

\n                 新行(换行)符 (‘\u000A‘)

\r                 回车符 (‘\u000D‘)

2、字符类

[abc]                    a、b或 c(简单类)

[^abc]                 任何字符,除了 a、b或 c(否定)

[a-zA-Z]               a到 z或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]            a到 d或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]               d、e或 f(交集)

[a-z&&[^bc]]        a到 z,除了 b和 c:[ad-z](减去)

[a-z&&[^m-p]]     a到 z,而非 m到 p:[a-lq-z](减去)

3、预定义字符类

.                         任何字符(与行结束符可能匹配也可能不匹配)

\d                        数字:[0-9]

\D                       非数字: [^0-9]

\w                       单词字符:[a-zA-Z_0-9]

\W                      非单词字符:[^\w]

4、边界匹配器

\b                        单词边界

\B                       非单词边界

5、Greedy数量词

X?                       X,一次或一次也没有

X*                       X,零次或多次

X+                       X,一次或多次

X{n}                    X,恰好 n次

X{n,}                   X,至少 n次

X{n,m}                X,至少 n次,但是不超过 m 次

6、组和捕获

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:

1     ((A)(B(C)))

2     \A

3     (B(C))

4     (C)

组零始终代表整个表达式。在替换中常用$匹配组的内容。

具体操作功能:匹配、切割、替换和获取

匹配:String  matches方法。

用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

判断一串数字是否是手机号:手机号段只有 13xxx 15xxx 18xxxx

public static void checkTel()

{

String tel = "16900001111";

String telReg = "1[358]\\d{9}";

System.out.println(tel.matches(telReg));

}

判断字符串是否是以字母开头其余全是数字

public static void demo()

{

String str = "b23a23456789";

String reg = "[a-zA-Z]\\d*";

boolean b= str.matches(reg);

System.out.println(b);

}

判断qq是否正确:qq5-15位,不能以0开头,中间也不能有字母

public static void checkQQ()

{

String qq = "123a454";

String regex = "[1-9]\\d{4,14}";

boolean flag = qq.matches(regex);

if(flag)

System.out.println(qq+"...is ok");

else

System.out.println(qq+"... 不合法");

}

切割:String split();

多空格切割:" _+"  _表示空格

.点的切割:"\."操作

\\ 切割 :"\\\\"操作

叠词的切割:"(.)\\1+"来操作,其中(.)是通配符,\\1代表叠一次,后面的+表示叠了多次。

实例:用 \\ 切割c:\\abc\\234\\a.doc

class RegexDemo

{

public static void main(String[] args)

{

splitDemo("c:\\abc\\234\\a.doc","\\\\");

}

public static void splitDemo(String s,String t)

{

String [] arr= s.split(t);

for(String st:arr)

System.out.println(st);

}

}

替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

典型的写法 str.replaceAll("(.)\\1+","$1")

实例:

public static void test_1()

{

String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.        程程...程...程";

/*

将已有字符串变成另一个字符串。使用 替换功能。

1,可以先将 . 去掉。

2,在将多个重复的内容变成单个内容。

*/

str = str.replaceAll("\\.+","");

System.out.println(str);

str = str.replaceAll("(.)\\1+","$1");

System.out.println(str);

}

获取:将字符串中的符合规则的子串取出。

操作步骤:

1,将正则表达式封装成对象。            Pattern p = Pattern.compile(reg);

2,让正则对象和要操作的字符串相关联。  Matcher m = p.matcher(str);

3,关联后,获取正则匹配引擎。           while( m.find())

4,通过引擎对符合规则的子串进行操作,    {    m.group(); }               伪代码

比如取出。

实例:获取ming tian jiu yao fang jia le ,da jia。 中4个字母的单词

import java.util.regex.*;

class RegexDemo2

{

public static void main(String[] args)

{

getDemo();

}

public static void getDemo()

{

String str = "ming tian jiu yao fang jia le ,da jia。";

System.out.println(str);

String reg = "\\b[a-z]{4}\\b";

//将规则封装成对象。

Pattern p = Pattern.compile(reg);

//让正则对象和要作用的字符串相关联。获取匹配器对象。

Matcher m  = p.matcher(str);

while(m.find())

{

System.out.println(m.group());

System.out.println(m.start()+"...."+m.end());//返回索引位置

}

}

}

其中group(),start(),end()所带的参数i就是正则表达式中的子表达式索引(第几个子表达式)

用法总结:

1.只想知道字符串对错(判断)用匹配

2.将字符串变为另一个字符串  用替换

3.将字符串按规则获取成多个子串  用分割

4.想获取字符串中的一部分  用获取

网页爬虫实例:

/*

网页爬虫(蜘蛛)

实际上是一个功能,用于搜集网络上的指定信息

需求:可用于收集邮箱等信息。

应用:如通过关键字搜索,实际就是使用“蜘蛛”,通过查找关键字获取相关的信息

*/

import java.io.*;

import java.util.regex.*;

import java.net.*;

import java.util.*;

class RegexTest2

{

public static void main(String[] args) throws Exception

{

getMails_1();

}

public static void getMails_1()throws Exception

{

URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");

URLConnection conn = url.openConnection();

BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line = null;

String mailreg = "\\w+@\\w+(\\.\\w+)+";

Pattern p = Pattern.compile(mailreg);

while((line=bufIn.readLine())!=null)

{

Matcher m = p.matcher(line);

while(m.find())

{

System.out.println(m.group());

}

}

}

/*

获取指定文档中的邮件地址。

使用获取功能。Pattern  Matcher

*/

public static void getMails()throws Exception

{

BufferedReader bufr =

new BufferedReader(new FileReader("mail.txt"));

String line = null;

String mailreg = "\\w+@\\w+(\\.\\w+)+";

Pattern p = Pattern.compile(mailreg);

while((line=bufr.readLine())!=null)

{

Matcher m = p.matcher(line);

while(m.find())

{

System.out.println(m.group());

}

}

}

}

时间: 2024-11-04 09:49:19

正则表达式基础用法的相关文章

正则表达式基础用法整理

正则表达式 目录 正则表达式 1. 正则表达式 1.1 正则表达式介绍 1.1.1 什么是正则表达式? 1.1.2 正则表达式的作用 1.2 正则表达式的使用 1.2.1 前提 1.2.2 使用python匹配正则表达式 1.2.3 正则表达式中的特殊元字符 1.2.4 分组 1.2.5 贪婪模式与非贪婪模式 1.3 python正则表达式使用 1.3.1 re函数 1.3.2 python中的匹配模式 1. 正则表达式 1.1 正则表达式介绍 1.1.1 什么是正则表达式? 正则表达式就是一种

[正则表达式]基础知识总结

一直只是知道正则表达式的用途,但具体没使用过,今天稍微了解了下它的基础用法.这里总结一下. 命令空间:System.Text.RegularExpressions 用途: 对字符串进行查找和替换: 识别重复的单词: 转换格式: 区分一个字符串的各个子元素,并进行提取. RegEx类: 是对正则表达式引擎的类抽象,通过调用该抽象类的不同方法,实现对正则表达式的处理. 该类的主要方法如下所示,具体用途相信通过方法名即可知道: 了解完Regex类的主要方法后,还需要关注三个比较重要的类和它们的层次,分

前端学PHP之正则表达式基础语法

前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述.正则表达式有三个作用:1.匹配,也常常用于从字符串中析取信息:2.用新文本代替匹配文本:3.将一个字符串拆分为一组更小的信息块.本文将详细介绍PHP中的正则表达式基础语法 [注意]关于javascript的正则表达式的详细信息移步至此 历史 在PHP中有两套正则表达式函数库,两者功

JAVA正则表达式高级用法(分组与捕获)

正则表达式在字符串处理中经常使用,关于正则简单的用法相信有一点程序基础的人都懂得一些,这里就不介绍简单基础了.这里主要讲解一下在JAVA中实现了的正则的高级用法-分组与捕获.对于要重复单个字符,非常简单,直接在字符后卖弄加上限定符即可,例如 a+ 表示匹配1个或一个以上的a,a?表示匹配0个或1个a.这些限定符如下所示: X ?     X ,一次或一次也没有X *     X ,零次或多次X +     X ,一次或多次X { n }     X ,恰好 n 次X { n ,}     X ,

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

Linux文本过滤搜索器grep与egrep的常用正则表达式与用法

grep家族中的grep及egrep的相应的正则表达式和用法. 1.grep家族是文本处理三大剑客之一.(grep,sed,awk) grep: (Global search REgular expression and Print out the line).其支持使用基本正则表达式. egrep:支持使用扩展正则表达式 fgrep:不支持使用正则表达式(一般在大型web网站日志搜索时所使用) grep的作用:过滤查找关键词并打印匹配的行. grep的用法: grep [选项] 匹配模式 [文

grep与正则表达式基础

目录 grep 正则表达式 grep用法简介 我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分. 1 命令:grep 2 格式:grep [option] "pattern" filename 3 选项: 4 -v:反向选择 5 -i:忽略大小写 6 -n:显示行号 7 -c:统计行数 8 -o:仅显示匹配到的字符串 9 -w:匹配整个单词 10 -q:不输出任何信息 11 -A 2:after

Linux 基础入门----正则表达式基础

介绍 虽然我们这一节的标题是正则表达式,但实际这一节只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表达式本身的内容很多,要把它说明清楚需要单独一门课程来实现,不过我们这一节中涉及到的相关内容通常也能够满足很多情况下的需求了. 想要更深入地学习使用正则表达式,在这里 正则表达式基础. 一.正则表达式 什么是正则表达式呢? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Ex

1.11正则表达式基础(学习过程)

正则表达式基础 实验介绍 虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表达式本身的内容很多,要把它说明清楚需要单独一门课程来实现,不过我们这一节中涉及到的相关内容通常也能够满足很多情况下的需求了. 想要更深入地学习使用正则表达式,在这里 正则表达式基础. 一.正则表达式 什么是正则表达式呢? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英