初学正则表达式

正则表达式就是以某种方式来描述字符串,例如,要找一个数字,它可能有一个负号在最前面,那么你就写一个负号加上一个问号,就像这样:-?

正则表达式是强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并且对输入的字符串进行搜索。下面,我们就来学学如何使用正则表达式吧。

这里注意,在Java中,对反斜线\有不同的处理。而其他语言,\\表示在正则表达式中插入一个普通的反斜线,而在Java中,\\的意思是插入一个正则表达式的反斜线,对其后面的字符具有特殊的意义。例如:要想插入一个数字,那么正则表达式就应该写为:\\d。如果只是想要插入一个普通的反斜线,就应该写成:\\\\。

public class FirstRegex {
	public static void main(String[] args){
		System.out.println("-12".matches("-?\\d+"));
		System.out.println("+100".matches("-?\\d+"));
		//(-|\\+)?\\d+代表的是起始字符可能是正号,也可能是负号,或者二则皆没有。
		System.out.println("+111".matches("(-|\\+)?\\d+"));
	}
}
结果:

true
false
true

上述代码中,-?\\d+  指的是“可能有一个负号,也可能没有,后面跟着一位或多位数字”(?  表示一个或另个)(+表示一个或多个),(-|\\+)? 指的是“字符串开头可能是一个正号或者负号或者二则皆没有”。好啦,这就是我们写的第一个简单的正则表达式。

这里,还需要介绍一下,String类还自带了一个非常有用的正则表达式工具——split()方法,用于将字符串从匹配正则表达式的地方切开。

下面,写了一个将字符串从匹配正则表达式的地方进行切开。例:

import java.util.Arrays;
public class Splitting {
	public static String split = "Hi, I am the method split";
	//输入正态方式
	public static void split(String regex){
		System.out.println(regex + ": "+Arrays.toString(split.split(regex)));
	}
	public static void main(String[] args){
		split(" ");
		split("\\W+");
		split("\\w+");
		split("m\\W+");
		split("m\\w+");
	}
}
结果:

 : [Hi,, I, am, the, method, split]
\W+: [Hi, I, am, the, method, split]
\w+: [, , ,  ,  ,  ,  ]
m\W+: [Hi, I a, the method split]
m\w+: [Hi, I am the ,  split]

这其中的\W的意思是非单词字符,\w的意思是单词字符,m\\W+表示字母m后面跟着一个或多个非单词字符,m\\w+表示字母m后面跟着一个或多个单词字符。


——创建正则表达式

正则表达式的完整构造子列表,可以参考JDK文档java.util.regex包中的Pattern类。以下来至api中的Pattern中的介绍。


例:自定义一个正则表达式,用于判断是否符合Email格式,然后输入内容,看是否匹配正则表达式,按Esc或者esc退出。

import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RexEmail {
	public static void main(String[] args){
			System.out.println("请输入自定义正态表达式:");
			Scanner in = new Scanner(System.in);
			String regex = in.nextLine();
		while(true){
			System.out.println("请输入:");
			String str = in.nextLine();
			if(str.equals("esc")||str.equals("Esc"))
				break;
			Pattern p = Pattern.compile(regex);
			Matcher m = p.matcher(str);
			boolean b = m.matches();
			if(b){
				System.out.println("输入正确!请继续...");
			}else{
				System.out.println("输入错误!请继续...");
			}
		}
	}
}

结果:

请输入自定义正态表达式:
^.*[\\@].*[\\.].{1,3}$
请输入:
ss@qq.com
输入正确!请继续...
请输入:
ss@qq.comm
输入错误!请继续...
请输入:
ss@qq.
输入错误!请继续...
请输入:
ss@qq.c
输入正确!请继续...
请输入:
ss@cd
输入错误!请继续...
请输入:
esc

上面自定义的正则表达式的意思为:^ 表示字段开头,$ 表示字段结束,.*代表一个或多个字符,[\\@]和[\\.]代表输入@和点,.{1,3}代表输入的字符至少为1个,之多为3个。


未完待续...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值