正则表达式基础用法

前端之家收集整理的这篇文章主要介绍了正则表达式基础用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

正则表达式的构造摘要

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次

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");

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

操作步骤:

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.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"));

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

}

猜你在找的正则表达式相关文章