java中的正则表达式

**正则表达式:**字符串处理神器

正则表达式用途:
1). 字符串匹配
2). 字符串查找
3). 字符串替换

基础知识:

符号 说明
. 匹配一个字符
* 0 或者n个字符
+ 1个及以上字符
? 1个或者0个
^ 位于[]中表示取反,位于[]外面表示一行的开头
$ 一行的结尾
- 范围
I 或者
&&
\d 一个数字,同[0-9]
\D 非数字,同[^0-9]
\s 空白字符,[ \t\n\x0B\f\r]
\S 非空白符
\w 大小写字母和下斜杠,同[a-zA-Z_0-9]
\W [^\w]
\b 一个单词的边界
{n} 出现n次
{n,} 至少出现n次
{n,m} n到m次
[n-m] n到m中的一个
[abc] abc中的一个
[^abc] 除abc外的任意一个
[a-zA-Z] 大写字母或者小写字母中的一个,同[a-z]
[a-z&&[eFG]] 小写字母并且是eFG中的一个

在java中使用:


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /***
     * 抓取网页的Email
     */
    public static void test5() {
        try {
            //先从网页保存一个页面,从读取文件内容
            BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\桌面\\text\\html.html"));
            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                catchEmail(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void catchEmail(String content) {
        String reg = "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(content);
        while (m.find()) {
            print(m.group());
        }
    }

    /***
     * 分组
     */
    public static void test4() {
        //用()分组表达式,分组的组号规则,整个是第0组,然后从左往右依次遇到“)”就算一组,逐渐+1
        Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");//整个第0组,3到5位的数字1组,两个小写字母2组,这里共3组,
        String s = "1212ss-453bb-223ccc-23fdfd-deefeffe324";
        Matcher m = p.matcher(s);
        while (m.find()) {
            print(m.group(0));//匹配第0组
            print(m.group(1));
            print(m.group(2));
        }
    }

    /***
     * 字符串替换
     */
    public static void test3() {
        Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//忽略大小写
        Matcher matcher = pattern.matcher("Java java JAva JaVa I love Java youHate JAVA asasfd dda");
        StringBuffer sb = new StringBuffer();
        int i = 0;
        while (matcher.find()) {//把匹配到的字符串,第技术
            i++;
            if (i % 2 == 0) {
                matcher.appendReplacement(sb, "JAVA");
            } else {
                matcher.appendReplacement(sb, "java");
            }
            print(matcher.group());
        }
        matcher.appendTail(sb);//把尾部没有匹配的字符串加上
        print(sb);
        //print(matcher.replaceAll("JAVA"));//匹配到的全部替换为答谢的java
    }

    /***
     * 得到匹配的字符串
     */
    public static void test2() {
        Pattern pattern = Pattern.compile("\\d{3,5}");
        String s = "123-453456-3435-0";
        Matcher matcher = pattern.matcher(s);
        print(matcher.matches());//否有有匹配的

        matcher.reset();//执行matches()方法之后再需要执行reset()方法,find()方法能正确匹配整个字符串
        while (matcher.find()) {
            print(matcher.group());
        }
    }

    /***
     * 匹配反斜杠和Email
     */
    public static void test1() {
        print("\\".matches("\\\\"));//Java中匹配一个反斜杠,需要四个\\\\
        print(" \n".matches("^[\\s&&[^\\n]]*\\n$"));//空白行匹配:开头是个空白符,非换行符,任意多个或一个,结尾是换行符
        print("[email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//匹配Email
    }

    public static void print(Object obj) {
        System.out.println(obj);
    }
}

常用的正则表达式:

  • ^\d+$  //匹配非负整数(正整数 + 0)
  • 1[1-9][0-9]$  //匹配正整数
  • ^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)
  • ^-[0-9][1-9][0-9]$  //匹配负整数
  • ^-?\d+$    //匹配整数
  • ^\d+(.\d+)?$  //匹配非负浮点数(正浮点数 + 0)
  • ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$  //匹配正浮点数
  • ^((-\d+(.\d+)?)|(0+(.0+)?))$  //匹配非正浮点数(负浮点数 + 0)
  • ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$  //匹配负浮点数
  • ^(-?\d+)(.\d+)?$  //匹配浮点数
  • 2+$  //匹配由26个英文字母组成的字符串
  • 3+$  //匹配由26个英文字母的大写组成的字符串
  • 4+$  //匹配由26个英文字母的小写组成的字符串
  • 5+$  //匹配由数字和26个英文字母组成的字符串
  • ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
  • 6+(.[\w-]+)*@[\w-]+(.[\w-]+)+$    //匹配email地址
  • 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
  • 匹配双字节字符(包括汉字在内):[^\x00-\xff]
  • 匹配空行的正则表达式:\n[\s| ]*\r
  • 匹配HTML标记的正则表达式:/<(.)>.|<(.*) />/
  • 匹配首尾空格的正则表达式:(^\s*)|(\s*$)
  • 正则表达式用例
    • 1、^\S+[a-z A-Z]$ 不能为空 不能有空格 只能是英文字母
    • 2、\S{6,} 不能为空 六位以上
    • 3、^\d+$ 不能有空格 只能是数字
    • 4、(.*)(.jpg|.bmp)$ 只能是jpg和bmp格式
    • 5、^\d{4}-\d{1,2}-\d{1,2}$ 只能是2004-10-22格式
    • 6、^0$ 至少选一项
    • 7、^0{2,}$ 至少选两项
    • 8、7{20,}$ 不能为空 二十字以上
    • 9、^+?a-z0-9*@([a-z0-9]+(.|-))+[a-z]{2,6}$邮件
    • 10、\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)([,;]\s\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)) 输入多个地址用逗号或空格分隔邮件
    • 11、^(([0-9]+))?[0-9]{7,8}$电话号码7位或8位或前面有区号例如(022)87341628
    • 12、8+@[a-z A-Z 0-9 _]+(.[a-z A-Z 0-9 _]+)+(,[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(.[a-z A-Z 0-9 _]+)+)*$
    • 只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
      
    • 13 ^\w+@\w+(.\w+)+(,\w+@\w+(.\w+)+)*KaTeX parse error: Undefined control sequence: \w at position 26: …这样子,更精练。 14 ^\̲w̲+((-\w+)|(\.\w+… [/size]
      15 : 图片链接:String reg = "(http|https)://(?!(\\.jpg|\\.png)).+?(\\.jpg|\\.png|\\.PNG|\\.JPG)";

  1. 0-9 ↩︎

  2. A-Za-z ↩︎

  3. A-Z ↩︎

  4. a-z ↩︎

  5. A-Za-z0-9 ↩︎

  6. \w- ↩︎

  7. \s|\S ↩︎

  8. a-z A-Z 0-9 _ ↩︎

你可能感兴趣的:(正则表达式)