版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
在计算机诞生之初,主要用于相关科研计算,但是随着其逐步地平民化,在编程领域可以看到越来越多的字符串的利用,而正则表达式作为一种语法,其方便之处就在于可以利用简短的规则,将目标字符串操作实现,并且其目前已经被大多数编译器所支持。
方法名 | 入口参数 | 返回值 | 修饰 |
---|---|---|---|
pattern() | 无 | 正则表达式的字符串形式 | public String |
Pattern() | String p, int f | 此为Pattern类的构造器 | private |
compile() | String regex | new Pattern(regex, 0)创建的对象 | public static Pattern |
compile() | String regex, int flags | new Pattern(regex, flag)创建的对象 | public static Pattern |
toString() | 无 | pattern,即正则表达式的字符串形式,和pattern()方法相同 | public String |
matcher | CharSequence input | Matcher对象 | public Matcher |
flags() | 无 | flags值 | public int |
matches() | String regex, CharSequence input | boolean值 | public static boolean |
split() | CharSequence input, int limit | 字符串数组(对象) | public String[] |
split() | CharSequence input | 字符串数组(对象)即split(input, 0) | public String[] |
quote() | String s | 字符串 | public static String |
其中CharSequence input 一般就是需要相关操作的字符串
complie(String regex)
:此方法主要通过静态方法调用,输入一个正则表达式,返回一个Patter对象,我们将此对象称作正则表达式的对象,注意:输入的字符串所含的正则表达式原本一杠\在Java语法中都要转化为两杠\才合法。
complie(String regex, int flags)
:此方法与上个方法类似,只不过利用flags来控制正则表达式匹配模式的选择,比如是否匹配大小写。详细见下个模块,Java中的匹配模式控制。
split(CharSequence input)
,用于分隔字符串,并返回一个String[],举例:
Pattern p2 =Pattern.compile("\\d+"); String[] strings=p2.split("Hello123 World456!"); for(String temp:strings){ System.out.print(temp); }
最终Console上显示:Hello World!
Pattern.matches("\\d+","2223");//返回true
Java在Pattern类中规定了9个匹配模式控制符:
public static final int UNIX_LINES = 0x01;
public static final int CASE_INSENSITIVE = 0x02;
public static final int COMMENTS = 0x04;
public static final int MULTILINE = 0x08;
public static final int LITERAL = 0x10;
public static final int DOTALL = 0x20;
public static final int UNICODE_CASE = 0x40;
public static final int CANON_EQ = 0x80;
public static final int UNICODE_CHARACTER_CLASS = 0x100;
各个字符所控制的模式选择不妨使用的时候上网搜索,不必死记硬背。
Matcher类只能通过Pattern实例调用matcher(CharSequence input)方法来调用,且Pattern类只有一些简单的匹配操作,要想得到更强和便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作。Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持。 一下两个方法类似: 方法一:
Pattern p=Pattern.compile("\\w+");
Matcher m =p.matcher("string123123");
System.out.println(m.matches());
方法二:
Pattern p =Pattern.compile("");
System.out.println(p.matches("\\w+","string123123"));
上面两个方法说明Pattern类和Matcher类有相似的”全匹配方法“:matches()方法,而且前者实际上调用了后者的matches()方法。方法一中程序更加明确可用,这是其优点。
1.public boolean lookingAt()
:主要进行匹配字符串开头,案例如下:
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("string123123");
System.out.println(m.lookingAt());
Pattern p2 = Pattern.compile("\\w+");
Matcher m2 = p2.matcher("string123123");
System.out.println(m2.lookingAt());
结果为:false,true;
2.public boolean find()
:对字符串进行匹配,匹配到的字符串可以在任何位置,案例如下:
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("string123123");
System.out.println(m.find());
Pattern p2 = Pattern.compile("\\w+");
Matcher m2 = p2.matcher("string123123");
System.out.println(m2.find());
结果为:true,true
3.Mathcer.start()/ Matcher.end()/ Matcher.group()
,当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信。
start()
返回匹配到的子字符串在字符串中的索引位置(字符串最左侧为索引:0值)
end()
返回匹配到的子字符串的最后一个字符在字符串中的索引位置(成立的末尾后一个)
group()
返回匹配到的子字符串
案例分析:
Pattern p = Pattern.compile("[a-z]+"); Matcher m = p.matcher("123string123"); System.out.println(m.find()); System.out.println(m.start()); System.out.println(m.end()); System.out.println(m.group()); 控制台输出: true 3 9 string
4.start(int i),end(int i),group(int i),此三个方法为上诉三个方法的重载,主要用于分组的相关参数显示(小括号()为一个分组),不输入则默认第一组,举例:
Pattern p = Pattern.compile("([a-z]+)+(\\d+)");
Matcher m = p.matcher("123string123");
System.out.println(m.find());
System.out.println(m.start());
System.out.println(m.start(1));
System.out.println(m.start(2));
System.out.println(m.end());
System.out.println(m.end(1));
System.out.println(m.end(2));
System.out.println(m.group());
System.out.println(m.group(1));
System.out.println(m.group(2));
控制台输出:
true
3
3
9
12
9
12
string123
5.注意事项