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)
^[0-9][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+)?$  //匹配浮点数
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$    //匹配email地址
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.)>.<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\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、^[\s|\S]{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、^[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 ]+(.[a-z A-Z 0-9 ]+)+)*$
只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
13 ^\w+@\w+(.\w+)+(,\w+@\w+(.\w+)+)*$上面表达式也可以写成这样子,更精练。 
14 ^\w+((-\w+)|(.\w+))\@\w+((.|-)\w+).\w+$ [/size]
--------------------- 
作者:Mr_LGZ 
来源:CSDN 
原文:https://blog.csdn.net/lyl0724/article/details/75574677 
版权声明:本文为博主原创文章,转载请附上博文链接!

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