正则
来源:互联网 发布:淘宝上买的车衣不耐用 编辑:程序博客网 时间:2024/04/26 04:01
注明出处:http://blog.csdn.net/lhy_ycu/article/details/45501777
前言
正则表达式可以说是用来处理字符串的一把利器,它是一个专门匹配n个字符串的字符串模板,本质是查找和替换。在实例演示之前先了解一下Pattern、Matcher这两个工具类,Pattern:编译好的带匹配的模板(如:Pattern.compile("[a-z]{2}");/ / 取2个小写字母);Matcher:匹配目标字符串后产生的结果(如:pattern.matcher("目标字符串");)。字符串还有一个自带的matches方法用来判断目标字符串是否匹配给定的正则表达式,格式为:targetStr.matches(regex); 返回类型为boolean。
基本使用方式
(一)支持的基本通配符:
. -可以匹配任意字符
\s -代表一个任意空白(空格、Tab)。
\S -代表一个任意的非空白。
\d -代表一个任意的数字(digital)。
\D -代表一个任意的非数字。
\w -代表一个单词字符。
-W -代表一个任意的非单词字符
注意:对于特殊字符,实际使用时记住要转义\ ,如:( ) [ ] { } \ ? * + ^(一行的开头) $(一行的结尾)|
(二)取值范围(用作出现次数的“副词”)
? --代表它前面的东西可以出现0~1次
* --代表它前面的东西可以出现0~N次
+ --代表它前面的东西可以出现1~N次
{n,m} --代表它前面的东西可以出现n~m次
{n,} --代表它前面的东西至少出现n次
{,m} --代表它前面的东西最多出现m次
{n} --代表它前面的东西必须出现n次
(三)方括号表达式
枚举:[ab1] --代表a或b或者1。
范围:[a-c] --代表a,b,c中的任意一个字符。
枚举与范围:[a-c1-3]--代表a,b,c,1,2,3中的任意一个字符。
表示求否:[^a-c] --代表不含a,b,c其中任意一个字符。
表示求交:[a-g&&[^b-d]]:--代表a,e,f,g中的任意一个字符。
表示必须含有其中之一:(com|org|cn)
总结:一个字符用\,多个字符用[],字符次数用{}
实例说明
(一)基本用法演示:
-
-
-
-
-
-
-
-
- public class RegexTest {
-
- public static void main(String[] args) {
-
- System.out.println("a".matches("."));
-
- System.out.println("a".matches("a?"));
-
- System.out.println("aaaa".matches("a+"));
-
- System.out.println("".matches("a*"));
-
- System.out.println("qqqqqq3".matches("q+[0-9]"));
-
- System.out.println("12345667890123".matches("\\d{12,100}"));
-
- System.out.println("192.168.0.1"
- .matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
-
- System.out.println("192".matches("[0-2][0-9][0-9]"));
-
- System.out.println(" \n\r\t".matches("\\s{4}"));
-
- System.out.println("\\".matches("\\\\"));
-
- System.out.println("hello".matches("^.*o$"));
-
- System.out.println("hello world".matches("^h[a-z]{1,3}o\\b.*d$"));
-
- System.out.println(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
-
- System.out.println("aaa 2222q".matches(".*\\d{4}."));
- }
-
- }
(二)实际应用演示:1、读取网页中所有的邮箱地址
-
-
-
-
-
-
-
-
- public class EmailTest {
-
- public static void main(String[] args) {
-
- String emailTemplate = "[\\w[.-]]+@[\\w]+\\.(com|org|cn|net)";
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(new FileInputStream(
- "d:\\email.html")));
- String line = null;
- StringBuffer sb = new StringBuffer();
- while ((line = br.readLine()) != null) {
- sb.append(line).append("\n");
- }
- parse(sb.toString(), emailTemplate);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- br.close();
- } catch (Exception e2) {
-
- e2.printStackTrace();
- }
- }
-
- }
-
-
-
-
-
-
-
-
-
- public static void parse(String targetStr, String template) {
- if (targetStr == null || template == null) {
- return;
- }
-
- Pattern pattern = Pattern.compile(template);
-
- Matcher matcher = pattern.matcher(targetStr);
-
- while (matcher.find()) {
-
- System.out.println("=======" + matcher.group());
- }
- }
-
- }
2、代码行数统计:(三)正则表达式进阶使用:查找子串
- String s1 = "123-45678-987-11";
- Pattern pattern = Pattern.compile("\\d{3,5}");
- Matcher matcher = pattern.matcher(s1);
- System.out.println(matcher.matches());
- matcher.reset();
- System.out.println(matcher.find());
- System.out.println(matcher.start() + "-" + matcher.end());
-
- System.out.println(matcher.lookingAt());
- System.out.println(matcher.lookingAt());
查找与替换-
- Pattern pattern2 = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
- Matcher matcher2 = pattern2
- .matcher("java Java JAVA jaVA jAVA ILoveYouJaVA youhateJaVa");
-
- System.out.println(matcher2.replaceAll("JAVA"));