java 正则表达式中_Java中正则表达式

正则表达式概念

简单理解:符合一定规则的字符串。

常用的正则表达式规则

此处只是介绍了几种常见的类型,还有其他类型,都在Pattern类的API中有,需要其他的直接查询API。

有如下几种类型:

A:字符

x 字符 x。举例:'a'表示字符a

\\ 反斜线字符。

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

\r 回车符 ('\u000D')

B:字符类

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

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

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

[0-9] 0到9的字符都包括

C:预定义字符类

. 任何字符。我的就是.字符本身,怎么表示呢? \.

\d 数字:[0-9]

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

在正则表达式里面组成单词的东西必须有这些东西组成

D:边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

就是非单词字符的地方。

举例:hello world?haha;xixi

E:Greedy 数量词

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

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次正则表达式的应用

A:判断功能

String类的public boolean matches(String regex)

使用该方法检测QQ号码输入是否正确?判断邮箱号码是否正确?

此处的例程仅仅用于测试方法,并不一定是很完美的代码。

例程1:检查QQ号码

package com.chechQQ.test;

import java.util.Scanner;

/** 检查输入QQ号码是否符合标准* 1.必须是5-15位的数字* 2.不能以0开头*/

public class CheckQQ {

public static void main(String[] args) {

//创建一个键盘录入对象Scanner sc = new Scanner(System.in);

System.out.println("请输入你的QQ号码:");

String qq = sc.nextLine();

System.out.println("检查是否合格:" + checkQQ(qq));

System.out.println("正则检查是否合格:" + checkQQByRegex(qq));

}

/** 创建一个检测方法* 返回值类型:boolean* 参数列表:String qq*/

public static boolean checkQQ(String qq)

{

boolean flag = true;

//检查是否长度合格if((qq.length() >= 5) && (qq.length() <= 15))

{

//判断是否以0开头if(!qq.startsWith("0"))

{

//判断内容是否都为数字char[] charr = qq.toCharArray();

for (char c : charr) {

if(!Character.isDigit(c))

{

flag = false;

break;

}

}

}

else

{

flag = false;

}

}

else

{

flag = false;

}

return flag;

}

/** 创建一个检测方法* 返回值类型:boolean* 参数列表:String qq*/

public static boolean checkQQByRegex(String qq)

{

//boolean flag = true;//String regex = "[1-9][0-9]{4,14}";//flag = qq.matches(regex);//return flag;

return qq.matches("[1-9][0-9]{4,14}");

}

}

例程2:检查邮箱

package com.chechQQ.test;

import java.util.Scanner;

/** 需求:判断一个字符串是否满足邮箱的格式** 分析:* 1.创建键盘录入对象,输入邮箱字符串* 2.编写正则表达式规则* 3.调用规则进行判断* 4.打印判断结果**/

public class CheckMailTest {

public static void main(String[] args) {

//创建键盘录入对象,输入邮箱字符串Scanner sc = new Scanner(System.in);

System.out.println("请输入你的邮箱:");

String mail = sc.nextLine();

//编写正则表达式规则String mailRegex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,5})+";

//调用规则进行判断boolean flag = mail.matches(mailRegex);

//打印判断结果System.out.println(mail + "是否是邮箱:" + flag);

}

}

B:分割功能

String类的public String[] split(String regex)

分割功能实际上就是按照指定的字符来将长的字符串切片,分成一小块一小块的单元。

此处也将给出两个测试例程,仅仅作为测试方法的例程。

例程1:测试年龄段是否符合要求

package com.chechQQ.test;

import java.util.Scanner;

/** 很多网站中查询好友或者查询其他人,可以输入查询条件* 此处以年龄查询作为例子* 年龄:18-24** 如何在后台获取到18和24这两个数据**/

public class SplitAges {

public static void main(String[] args) {

//定义一个年龄范围String ages = "18-24";

//定义规则String regex = "-";

//分割字符串,得到数据String[] strArr = ages.split(regex);

遍历数据//for (String string : strArr) {//System.out.println(string);//}

//拿到开始年纪和结束年龄int startAge = Integer.parseInt(strArr[0]);

int endAge = Integer.parseInt(strArr[1]);

//键盘输入年龄Scanner sc = new Scanner(System.in);

System.out.println("输入年龄:");

int myAge = sc.nextInt();

//判断年龄是否符合if(myAge >= startAge && myAge <= endAge)

{

System.out.println("你就是我要找的人");

}

else

{

System.out.println("不符合要求,滚");

}

}

}

例程2:对分割功能的多方面测试

package com.chechQQ.test;

/** 分割功能应用*/

public class SplitTest {

public static void main(String[] args) {

//目标字符串String s1 = "aa,bb,cc";

//直接分割字符串String[] s1Arr = s1.split(",");

//遍历for (String string : s1Arr) {

System.out.println(string);

}

System.out.println("-----------------------");

//目标字符串String s2 = "aa.bb.cc";

//直接分割字符串//String[] s2Arr = s2.split("."); //错误版,字符"."在正则表达式中表示任意字符,所以将所有都分割了,打印出来空白String[] s2Arr = s2.split("\\.");

//遍历for (String string : s2Arr) {

System.out.println(string);

}

System.out.println("-----------------------");

//目标字符串String s3 = "aa bb cc";

//直接分割字符串String[] s3Arr = s3.split(" +"); //表示一个或多个空格

//遍历for (String string : s3Arr) {

System.out.println(string);

}

System.out.println("-----------------------");

//目标字符串//此处使用文件路径作为字符串,必须使用\\表示一个\String s4 = "D:\\JAVA learning\\Split";

//直接分割字符串//String[] s4Arr = s4.split("\\"); //错误版 将会报异常String[] s4Arr = s4.split("\\\\"); //正则表达式中\\代表一个\,\\\\才能代表\\

//遍历for (String string : s4Arr) {

System.out.println(string);

}

System.out.println("-----------------------");

}

}

C:替换功能

String类的public String replaceAll(String regex,String replacement)

替换功能挺常见的,比如我们的QQ中发送一些非法的字符,如银行卡号等,就会被QQ给拦截。此例程也就实现了类似功能:

package com.replace.test;

/** 替换功能*/

public class ReplaceBadnum {

public static void main(String[] args) {

//源字符串String str = "hello qq23424 world kh6212133 java";

//替换规则替换后只留下一颗*//String regex = "\\d+";//String replacStr = "*";//result:hello qq* world kh* java

使用每一颗*替换每一个字符//String regex = "\\d";//String replacStr = "*";//result:hello qq***** world kh******* java

//直接剔除掉数字String regex = "\\d";

String replacStr = "";

//result:hello qq world kh java

//进行替换String result = str.replaceAll(regex, replacStr);

//打印输出System.out.println("result:" + result);

}

}

D:获取功能

Pattern和Matcher

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

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

find():查找存不存在

group():获取刚才查找过的数据

前面的三个功能都是可以使用String类的方法完成,而且使用String类的方法挺简单了,但是第四个功能就使用Pattern类和Matcher类,Pattern类用来编译我们写的正则表达式,将去转化为一个Pattern对象,使用Pattern对象的方法则可以获取Matcher类匹配器的对象,这两步是必须的。当有了匹配器对象时,可以使用其中的方法处理字符串了。

两个例程如下,一个完成了判断功能,一个完成的是获取功能。

例程1:判断功能

package com.getFun.test;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/** 典型的调用顺序是** Pattern p = Pattern.compile("a*b");* Matcher m = p.matcher("aaaaab");* boolean b = m.matches();*/

public class PatternTest {

public static void main(String[] args) {

//典型调用顺序//使用Pattern的compile()方法来编译正则表达式得到Pattern对象Pattern p = Pattern.compile("a*b");

//使用Pattern对象的matcher()方法得到匹配器对象,需要传入参数是被比较字符串Matcher m = p.matcher("aaaaab");

//调用匹配器方法,得到匹配结果boolean b = m.matches();

System.out.println(b);

//在判断功能中使用太过于麻烦了,推荐还是使用字符串中的字符串匹配方法//字符串判断功能String str = "aaaaab";

//正则表达式String regex = "a*b";

//使用字符串判断功能boolean result = str.matches(regex);

System.out.println(result);

}

}

例程2:获取功能

package com.getFun.test;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/** 从字符串"da jia ting wo shuo,jin tian yao xia yu,wan shang bu shang ke,gao xin bu?"* 中找出三个字符构成的词,然后输出*/

public class GetSubString {

public static void main(String[] args) {

//源字符串String str = "da jia ting wo shuo,jin tian yao xia yu,wan shang bu shang ke,gao xing bu?";

//规则//修改前的规则//String regex = "\\w{3}";//上一个规则存在漏洞,只要是3个字符都正确//应该限制字符串前后都字符分界符String regex = "\\b\\w{3}\\b";

//将规则编译后的到Pattern对象Pattern p = Pattern.compile(regex);

//使用Pattern方法得到匹配器对象Matcher m = p.matcher(str);

//使用匹配器中的方法获取字符串使用find方法来查询是否匹配//boolean flag = m.find();//System.out.println(flag); //true使用group方法来获取子串//String subStr = m.group();//System.out.println(subStr); //jia多获取几次//flag = m.find();//System.out.println(flag); //true//subStr = m.group();//System.out.println(subStr); //tin 此处得到的结果不正确检查上面的使用方法,只有目标字符串和规则是自己写的,其他都是写好直接调用的那么可能是规则出错了

//使用循环处理整个字符串while(m.find())

{

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

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值