正则表达式知识详解之匹配开头或结尾 (java版示例)

时间:2025-02-15 16:18:40
package com.songguoliang.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式知识 * @date 2016-04-15 10:14:48 * @author sgl */ public class Demo01 { /** * 匹配字符串,并且是以该字符串开头或结尾 * 字符串边界的元字符有两个:一个是用来匹配字符串开头的^,另一个是用来匹配字符串结尾的$ * @date 2016-04-20 15:19:14 * @author sgl */ public static void stringBoundary(){ String str="hello world,hello java,hello java"; System.out.println("===========匹配字符串==========="); //匹配str中所有字符串hello,这时str中3个hello都能匹配上,通过下面打印的匹配上的字符串的位置可以看出 Pattern p=Pattern.compile("hello"); Matcher m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } System.out.println("===========匹配字符串,并且该字符串是在开头的位置==========="); // ^表示匹配字符串的开头,但是如何在[]里面则表示非,如[^a-f] 不匹配a-f // "hello""^hello"的区别就是:前者匹配时不管是不是在开头位置,只要能匹配就行,后者则是不但要能匹配而且还要是在开头的位置。这时str中3个hello只有第1个能匹配上。 p=Pattern.compile("^hello"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } System.out.println("===========匹配字符串==========="); //这时str中两个java都能匹配上 p=Pattern.compile("java"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } System.out.println("===========匹配字符串,并且是该字符串是在末尾的位置==========="); //这时str中两个java只有第2个才能匹配上 p=Pattern.compile("java$"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } } public static void main(String[] args) { Demo01.stringBoundary(); } }