一、
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
- 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配");
- 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
- 1. 灵活性、逻辑性和功能性非常的强;
- 2. 可以迅速地用极简单的方式达到字符串的复杂控制。
- 3. 对于刚接触的人来说,比较晦涩难懂。
注意:正则表达式写好后,没有错对之分,返回结果只是true和false
校验QQ号,要求:必须是5~15位数字,0不能开头。没有正则表达式之前
public class regex {
public static void main(String[] args) {
checkQQ("0123134");
}
public static void checkQQ(String qq)
{
int len = qq.length();
if(len>=5 && len <=15)
{
if(!qq.startsWith("0"))
{
try
{
long l = Long.parseLong(qq);
System.out.println("qq:"+l);
}
catch (NumberFormatException e)
{
System.out.println("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.out.println("QQ号长度错误");
}
}
使用正则表达式之后的代码:
public class regex {
public static void main(String[] args) {
checkQQ2("0123134");
}
public static void checkQQ2(String qq) {
String reg = "[1-9][0-9]{4,14}";
System.out.println(qq.matches(reg)?"合法qq":"非法qq");
}
}
二、
关于使用小括号的捕获组功能以上说的不是很具体,这里举一个例子:(以下笔记参考了 Friedl 的精通正则表达式 一书)
下面的例子展示如何使用正则表达式检索一段文本里面接连重复的两个单词,先给出正则表达式:
\\<([A-Za-z]+) +\\1\\>
\< 首先匹配一个单词的开头,然后将 [A-Za-z]+ 放在一对小括号里,这个小括号能够记住空号里的正则表达式所匹配到的内容,并将其存储在元字符序列 \\1 里面(如果 [A-Za-z]+ 匹配到 the, 那么存储在 \\1 里面的就是 the),后面如果要用到其内容,仅需使用 \\1 即可。
在一个表达式中我们可以使用多个括号。再使用 \\1, \\2, \\3 等来表示第一、第二、第三、组括号表示前面括号捕获到的文本。括号是按照开括号 ( 从左至右的出现顺序进行,所以 (a-z)(0-9)\1\2 中的 \\1 代表的是 [a-z] 匹配的内容,而 \\2 代表的是 [0-9] 匹配的内容。
实例,判断一段文本中是否有重复单词:
import java.util.regex.*;
class FingRep{
public static void main(String[] args){
String content = "I am the the beginner in java";
String pattern = "\\<([A-Za-z]+) +\\1\\>";
boolean isMatch = Pattern.matches(pattern, content);
System.out.println("是否包含重复单词?"+ isMatch);
}
}