---恢复内容开始---
众所周知,在进行一些搜索,拆分,替换,验证操作时,必须提供一定的确切文字,但是对于静态的文本就显得有些笨拙,而正则表达式就显得比较灵活,并且减少了代码量,也增加了代码的维护性。
那么什么是正则表达式??
正则表达式,又称正规表示法、常规表示法(在代码中常常简写为regex),正则表达式使用单个字符串来匹配一些符合某个句法规则的字符串(比如和谐用语,或者搜索)。当然也有一些拆分,替换,验证。通俗的来讲就是搜索、编辑或处理文本。
正则表达式在java.util包中,java.util.regex 用于匹配字符序列与正则表达式指定模式的类。
正则表达式的常用字符
\\ 反斜杠字符 \t 制表符 \n 换行符 \r 回车符 \f 换页符
正则表达式的常用字符类
[abc] a,b或c
[^abc] 任何字符,除了a,b或c
[a-zA-Z] a到z或A到Z,两头的字母包含在内
[a-d[m-p]] a到d或m到p:[a-dm-p](并集)
[a-z&&[def]] d,e或f
[a-z&&[^bc]] a到z,除了b和c:
[ad-z][a-z&&[^m-p]] a到z,而非m到p:[a-lq-z]
预定定义字符
. 任意字符 \d 数字[0-9] \D非数字[^0-9] \s空白字符 \S非空字符[^\s]
当然我上面说的这些都是常用的,还有很多,我就不一一说明了。
主要包含以下两个类:Pattern和Matcher
返回 Pattern 的 java.util.regex 中的方法:
java.util中Pattern方法如下:
static Pattern compile(String regex)
将给定的正则表达式编译到模式中
static Pattern compile(String regex, int flags)
将给定的正则表达式编译到具有给定标志的模式中。
Matcher matcher(CharSequence input)
生成一个给定命名的Matcher对象
int flags()
返回当前Pattern的匹配标志
boolean matches (String reges)
使用给定的正则表达式来验证当前字符串,若满足,则返回true
String[] split(String str)
将当前字符串中按照满足正则表达式的部分进行拆分,返回所有被拆分的部分
String replaceAll(String regex,String str)
将当前字符串中满足正则表达式的部分替换为给定的字符串
接下来我们用代码来演示一下其中的方法:
1 public class StringDemo { 2 public static void main(String[] args) { 3 String str = "abc123def456ghi789abc"; 4 String regex = "[0-9]+"; 5 String[] array = str.split(regex); 6 for (int i = 0; i < array.length; i++) { 7 System.out.println(array[i]); 8 }
运行结果为:
不难看出代码对字符串进行了拆分
然后我用代码演示了一下我们经常填写自己的邮箱时的验证,代码如下:
1 public class StringDemo1 { 2 public static void main(String[] args) { 3 /* 4 * 电子邮箱的正则: 5 * [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+ 6 */ 7 String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; 8 String email = "zhoujiaqi@qq.com"; 9 boolean matches = email.matches(regex); 10 if (matches) { 11 System.out.println("是邮箱"); 12 }else { 13 System.out.println("不是邮箱"); 14 } 15 } 16 }
以上所述就是正则表达式的Pattern。
java.util中Matcher方法如下:
Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤。也就是将当前匹配子符串替换为指定字符串,
并且将替换后的子串添加到一个StringBuffer对象里。
StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤。
int end()
返回最后匹配字符之后的偏移量,也就是离原目标的索引。
int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。
boolean find(int start)
重设Matcher匹配器,并且尝试在目标字符串里从指定的位置开始查找下一个匹配的子串。
String group()
返回由以前匹配操作所匹配的输入子序列的内容。
String group(int group)
返回由以前匹配操作期间由给定组捕获的输入子序列内容。
int groupCount()
返回此Matcher对象查找所获得的匹配组的数量。
boolean lookingAt()
检测目标字符串是否以匹配的子串起始。
boolean matches()
检测整个目标字符串是否完全匹配,若匹配返回true。
Pattern pattern()
返回由此匹配器解释的现有模式。
String replaceFirst(String replacement)
将当前字符串中第一个满足正则表达式的部分替换为给定的字符串
String replaceAll(String replacement)
将当前字符串中满足正则表达式的部分替换为给定的字符串
Matcher reset()
重设Matcher对象。
Matcher reset(CharSequence input)
重置此具有新的目标字符串的匹配器。
int start()
返回当前查找所获子串的开始字符在原目标字符串中的索引。
int start(int group)
返回当前查找所获得的和指定组匹配的子串的第一个字符在原目标字符串中的索引。
用一段代码来演示一下:
1 public class StringDemo3 { 2 public static void main(String[] args) { 3 String str = "abc123def456ghi789abc"; 4 /* 5 * 将数字部分替换为"##" 6 */ 7 String regex = "[0-9]+"; 8 str = str.replaceAll(regex, "##"); 9 System.out.println(str); 10 } 11 }
使用了String replaceAll(String replacement) 方法。输出结果为:
以上就是有关正则表达式的我所知道的,虽然都是些简单的用法,没有多么深入的讨论,如果大家有补充的,可以补充。