最近在一个作业中涉及到对字符串的提取,比如:在字符串“2016级信本1班1001张三”中,要提取此字符串中学生的学号,一般我们可以通过String方法的substring方法来提取,在这里我们也可以通过正则表达式来提取到学生的学号,先上源码。
源码:
实验结果:
通过源码我们可以很容易的看出正则表达式主要需要使用到Matcher类和Pattern类,因此如果我们要使用正则表达式我们可以先写出基本的语法:Matcher matcher = Pattern.compile(“”).matcher(“”);此时我们就要来填参数了,在第一个括号内需要填入的是我们需要得到的信息,是一个固定的模式。比如说:我们需要得到学号的信息,因此我们的参数是“班(\\d+)张三”,我们可以简单的理解这里的参数为一个字符串,而这个字符串是由你要的字符串的前面一部分+你想要的字符串+你想要的字符串的后面的部分,其中你想要的字符串用括号扩起来,然后用对应的规则来表示,对应规则我们后面再讲,比如:“信本(\\d)班”则最后的输出结果为1,表示此同学是几班;而matcher后面的参数表示原始字符串,我们可以理解为要从哪个字符串去提取信息,那么这个参数就填哪个。
在写完第一行代码后我们的工作就已经完成一大半了,接下来我们只需要输出我们想要的信息即可,在输出我们想要的结果时我们需要用到matcher的两个方法,matcher.find和matcher.group。matcher.find我们可以简单的理解为找到接下来可以匹配到的字符串,如果找到我们则打印此字符串;在matcher.group方法中有一个参数,此参数表示我们想要得到第几个括号里的信息,此括号是指Pattern.compile()方法里面的括号,因为我们想要得到第一个括号的内容,因此我们的参数为1,于是就有了我们的代码:
While(matcher.find()){
System.out.println(matcher.group(1));
}
至此一个简单的正则表达式就有了,这样就可以得到我们想要得到的字符串。
再从头分析我们的代码,我们发现正则表达式其实也并不难,其本质上就是进行模式匹配,然而在进行匹配时我们有时候需要得到其他的信息,并不是只是数字,因此此时就要用到相对应的规则,在这里列出了平时我们比较常用的几个:
预定义的字符类 :
\d 数字: [0-9]
\D 非数字: [^0-9]
\s 空格符: [ \t\n\x0B\f\r]
\S 非空格符: [^\s]
\w 单词字符: [a-zA-Z_0-9]
\W 非单词字符: [^\w]
表达次数的符号:
符号次数
* 0次或者多次
+ 1次或者多次
? 0次或者1次
{n} 恰好n次
{n,m} 从n次到m次