前言
基本类
(1)Pattern类:是用来表达和陈述所要搜索模式的对象
(2)Matcher类:是真正影响搜索的对象
(3)PatternSyntaxException类:当遇到不合法的搜索模式时,会抛出例外
代码实例
Test1.java
public class Test1 { public static void main(String[] args) { String str = "(222)-123"; String regEx = "\\(222\\)"; Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(str); if(mat.find()) System.out.println(mat.group()); else System.out.println("Not find"); }}这个程序是在(222)-123这个字符串中查找匹配"(222)",如果存在会输出匹配的字符串,否则输出"Not find";
String regEx = "\\(222\\)";这段代码之所以使用两个反斜线符号“\\”,是因为在java中,与regex有关的包,并不都能理解和识别反斜线字符\,
为避免这一点,即为了让反斜线字符\在模式对象中被完全地传递,应该用双反斜线字符”\\“。这里,如果要表示一个“字面上的(”圆符号,就要使用“\\”。大家也可以试试String regEx = "(222)"这个匹配模式,输出结果是“222”,就也是说这是圆符号不是作为一个字面上的字符,而是表示222作为一个整体来看待的意思。如果说要匹配“(222”,如果这时使用String regEx = "(222"是会报错的。必须使用String regEx = "\\(222)"。
为避免这一点,即为了让反斜线字符\在模式对象中被完全地传递,应该用双反斜线字符”\\“。这里,如果要表示一个“字面上的(”圆符号,就要使用“\\”。大家也可以试试String regEx = "(222)"这个匹配模式,输出结果是“222”,就也是说这是圆符号不是作为一个字面上的字符,而是表示222作为一个整体来看待的意思。如果说要匹配“(222”,如果这时使用String regEx = "(222"是会报错的。必须使用String regEx = "\\(222)"。
同样的上面String regEx = "\\(222\\)";还可以表示为:
String regEx = "\\(2{3}\\)";这里{3}表示重复符,表示{3}的前一个字符重复出现3次,则2{3}就表示"222"。有于我们匹配的是(整数),那么还可以使用下面的方式:
String regEx = "\\(\\d\\d\\d\\)";这里"\d"表示从0-9其中一个数字
如果说要匹配"(222)-123"整个字符串,可以使用下面这个表达式:
String regEx = "\\(\\d{3}\\)+-+(\\d{3})";这里和大家介绍一个“+”符号,这个符号表示连接的意思,就像String字符串中的“+”一样,连接两个字符串。其实上面的表达式等同于:
String regEx = "\\(\\d{3}\\)-(\\d{3})";
总结
(2)\d,表示0-9中的一个数字
(3)\\(\\),表示圆括号“()”
(4)+,表示连接两个表达式