正则表达很实用,尤其是操作字符串,比如我们要提取“ Hello ,my name is ipolaris!”中所有单词,你会用使用生么方法呢。想到的方法可能split(),但是()内应该是什么呢,是“,”," "还是“!”,恐怕是三者都得有,这样就会使用到正则表达式就比较方便了,而且split(regex)的参数名也很显然是要求正则表达式。
package net.csdn.blog.iPolaris.javatest;
public class JavaTest {
static String testStr = "Hello,my name is ipolaris!";
public static void main(String[] args) {
for (String string : testStr.split(",| |!")) {//正则中"|"表示一种或的关系
System.out.println(string);
}
}
}
运行的结果如下:
![](https://img-my.csdn.net/uploads/201302/02/1359796440_9920.png)
如果在上面字符串中加上一个数字,变成了了“Hello ,my name is ipolaris 007!”,我们还是想提取所有的单词,当然我们不把007算在单词之内(而且007是可变的,也可能是其他的数字,所以这里我们的目的是把数字过滤掉),我们把过滤数字的正则定义为“-?\\d+|\\+?\\d”,整个的就应该为",| |!|-?\\d+|\\+?\\d",过滤数字当然也要过滤掉符合“-”,“+”,“?”表示之前的表达式出现一次或不出现,“\d”表示数字,再加个“\”转义一下,“+”表示出现也过或多个之前的表达式,此处也就是说出现一个或多个数字。这样就能达到提取单词的目的了。但是如果不断的扩展下去,我们再在里面添加其他的一些字符,如:“?”等,我门的表达式就要变得很长了,但是我们可以用一个表达式来筛选所有非字母的字符。正常的话单词都已大写或小写字母开头(暂不考虑类似I’am这种形式),所以表达式为[a-zA-Z],非字母的表达式可以表示为[^a-zA-Z],这样的话也能将所有的单词过滤出来。split方法只是一种正则表达是的一种应用,像replaceAll(regex, replacement)等方法也可以应用正则表达式来进行字符串灵活的操作。
关于正则表达式中各字符的含义,可以查阅文档http://www.cjsdn.net/Doc/JDK60/ 在 java.util.regex.Pattern中会有详细的解释