正则表达式就是以某种方式来描述字符串,例如,要找一个数字,它可能有一个负号在最前面,那么你就写一个负号加上一个问号,就像这样:-?
正则表达式是强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并且对输入的字符串进行搜索。下面,我们就来学学如何使用正则表达式吧。
这里注意,在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个。
未完待续...