在Java中使用基本的正则表达式

一、正则表达式简介

正则表达式是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。爬虫中解析html可以使用正则来方便的提取信息

二、正则表达式匹配规则

模式 描述
\w 匹配字母、数字、下划线
\W 匹配字母、数字、下划线
\s 匹配任意空白字符,相当于[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,相当于[0-9]
\D 匹配非数字的字符
\A 匹配字符串开头
\Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结尾,如果存在换行,同时还会匹配换行符
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配一行字符串的开头
$ 匹配一行字符串的结尾
. 匹配任意字符,除了换行符
[^…] 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符
* 匹配0个或多个表达式
+ 匹配1个或多个表达式
? 匹配0个或1个前面的正则表达式定义的片段,非贪婪方式
() 匹配括号内的表达式,也表示一个组
{n} 精确匹配n个前面的表达式,比如\d{n},代表n个数字
{n,m} 匹配n到m次由前面正则表达式定义的片段,贪婪方式

代码实战:

public class RegexAction {
    public static void main(String[] args) {
        String s = "Hello 123 4567 World_This is a Regex Demo";
        //match_1(s);
        //match_2(s);
        //match_3(s);
        //match_4(s);
        //match_5(s);
        match_6(s);
    }

    private static void match_1(String s) {
        Pattern pattern = Pattern.compile("^Hello\\s\\d\\d\\d\\s\\d{4}\\s\\w{10}");
        Matcher matcher = pattern.matcher(s);

        if(matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }

    private static void match_2(String s) {
        Pattern pattern = Pattern.compile("Hello\\s(\\d+)\\s\\d{4}\\s\\w{10}");
        Matcher matcher = pattern.matcher(s);

        if(matcher.find()) {
            System.out.println(matcher.group(0));  //匹配到的整个结果
            System.out.println(matcher.group(1));  //匹配到的第一个括号中的结果
        }
    }

    private static void match_3(String s) {
        Pattern pattern = Pattern.compile("Hello\\s(\\d*)\\s\\d{4}\\s\\w{10}");
        Matcher matcher = pattern.matcher(s);

        if(matcher.find()) {
            System.out.println(matcher.group(0));  //匹配到的整个结果
            System.out.println(matcher.group(1));  //匹配到的第一个括号中的结果
        }
    }

    private static void match_4(String s) {
        Pattern pattern = Pattern.compile("Hello.*Demo");
        Matcher matcher = pattern.matcher(s);

        if(matcher.find()) {
            System.out.println(matcher.group(0));  //匹配到的整个结果
        }
    }

    /**
     * 贪婪匹配
     * 匹配中间数字,只能得到7
     * .*会尽可能多的匹配数据
     * @param s
     */
    private static void match_5(String s) {
        Pattern pattern = Pattern.compile("Hello.*(\\d+).*Demo");
        Matcher matcher = pattern.matcher(s);

        if(matcher.find()) {
            System.out.println(matcher.group(1));  //匹配到的整个结果

        }

    }

    /**
     * .*?非贪婪匹配
     * @param s
     */
    private static void match_6(String s) {
        Pattern pattern = Pattern.compile("Hello.*?(\\d+).*Demo");
        Matcher matcher = pattern.matcher(s);
        if(matcher.find())  {
            System.out.println(matcher.group());
            System.out.println(matcher.group(1));
        }
    }

	/**
     * 正则表达式字符串也可以不编译直接使用
     * @param s
     */
    private static void match_7(String s) {
        String regex = "Hello.*?(\\d+).*Demo";
        boolean flag = s.matches(regex);
        System.out.println(flag);
    }

}
  • Pattern 类
    pattern 对象是一个正则表达式的编译表示
  • Matcher 类
    Matcher 对象是对输入字符串进行解释和匹配操作的引擎
  • find()方法
    尝试查找与该模式匹配的输入序列的下一个子序列,直到搜索到输入序列结束
    可以从指定位置开始匹配find(int start)

到此这篇关于在Java中使用基本的正则表达式的文章就介绍到这了,更多相关Java使用正则表达式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Java中使用基本的正则表达式

    一.正则表达式简介 正则表达式是使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.爬虫中解析html可以使用正则来方便的提取信息 二.正则表达式匹配规则 模式 描述 \w 匹配字母.数字.下划线 \W 匹配非字母.数字.下划线 \s 匹配任意空白字符,相当于[\t\n\r\f] \S 匹配任意非空字符 \d 匹配任意数字,相当于[0-9] \D 匹配非数字的字符 \A 匹配字符串开头 \Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串 \z 匹配字符串结尾,如果存在换行,同时

  • Java正则表达式实现经纬度的合法性操作

    Java正则表达式 经纬度合法性 经度: -180.0-+180.0(整数部分为0-180,必须输入1到5位小数) 正则表达式: /^[\-\+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/ 纬度: -90.0-+90.0(整数部分为0-90,必须输入1到5位小数) 正则表达式: /^[\-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/ 遇到了一个这样的需求,前端传来list集合,后台校验每个对

  • Java 如何使用正则表达式去除前导0

    我就废话不多说了,大家还是看代码吧 String s="0000000002121210" s=s.replaceAll("^(0+)", ""); System.out.println(s); 补充:Java中数字处理去掉末尾的0 实例如下所示: public static String insertComma(String s, int len) { if (s == null || s.length() < 1) { return &

  • java 使用正则表达式去除前后空格

    问题描述: java去除字符串前后空白,身为小伙子的我搞了大半天,其实蛮简单的. 解决方案: 方式一: trim() trim()是 String里的常用的方法,作用:返回字符串的副本,忽略前导空白和尾部空白* 输出结果: 方式二:正则表达式: replaceAll(String regex,String replacement):也是String类的常用方法, 是一个形参为可以填正则表达式,第二形参为替换的内容 这里需要的正则式: (1) \s 表示空格, (2) ^表示开头 (3) $表示结

  • JAVA正则表达式及字符串的替换与分解相关知识总结

    JAVA正则表达式及字符串的替换与分解 Java 提供了 java.util.regex 包来与正则表达式进行模式匹配 java.util.regex 包主要包括以下三个类: Pattern 类: pattern 对象是一个正则表达式的编译表示.Pattern 类没有公共构造方法.要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象.该方法接受一个正则表达式作为它的第一个参数. Matcher 类: Matcher 对象是对输入字符串进行解释和匹配

  • Java正则表达式里隐藏的陷阱

    前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%.通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息. 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处.通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法. 很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下.为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试.

  • Java中Pattern用法实例(正则表达式)

    目录 1. 正则表达式的应用 2. 常用正则表达式 3 贪婪匹配与懒惰匹配 补充:其它的一些用法 总结 1. 正则表达式的应用 在给用户发送消息时通常情况会有相同的消息模板,但其中部分信息跟用户相关,因此需要对消息模板中的变量部分进行替换.而对于一个系统而言可能有很多套完全不同的模板.因此需要一个通用的根据实际信息替换消息模板中变量的方法.消息模板的变量与velcity中的变量规范相同. publicstatic <K, V> String replacePlaceHolderWithMapV

  • Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正文的前50字作为摘要,那么这时需要去除所有html标签,然后在截取50字,所以就通过了Java正则表达式实现了如下方法,代码如下: 注:这是Java正则表达式去除html标签方法. private static final String regEx_script = "<script[^>

  • JAVA中正则表达式小总结(整理)

    ]js正则表达式基本语法(精粹):  http://www.jb51.net/article/72044.htm 许多语言,包括Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级"搜索-替换"功能.所以JAVA语言也不例外.正则表达式已经超出了某种语言或某个系统的局限,成为被人们广为使用的工具,我们完全可以用它来解决实际开发中碰到的一些实际的问题. 在JDK1.3及之前的JDK版本中并没有包含正则表达式的

  • Java中使用正则表达式处理文本数据

    本文将介绍如何在Java中使用正则表达式来处理文本数据.正则表达式就是一个字符串,但和普通的字符串不同的是,正则表达式是对一组相似字符串的抽象,如下面的几个字符串: a98b   c0912d   c10b   a12345678d   ab 我们仔细分析上面五个字符串,可以看出它们有一个共同特征,就是第一个字符必须是'a'或'c',最后一个字符必须是'b'或'd',而中间的字符是任意多个数字组成(包括0个数字).因此,我们可以将这五个字符串的共同特点抽象出来,这就产生了一个正则表达式:[ac]

  • Java中正则表达式的使用和详解(下)

    在上篇给大家介绍了Java中正则表达式的使用和详解(上),具体内容如下所示: 1.常用正则表达式 规则 正则表达式语法   一个或多个汉字 ^[\u0391-\uFFE5]+$  邮政编码 ^[1-9]\d{5}$ QQ号码 ^[1-9]\d{4,10}$  邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$  用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$ 手

  • java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * @author fhd001 */ public class RegexTest { public static void main(String[] args) { /* * 普通字符 */ String str1 = "abc45abc345"; String[]arr1 = str1

  • Java中正则表达式的使用和详解(上)

    1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式 Pattern pattern = Pa

  • 详解java中的正则表达式

    判断目标字符串中是否 可能 含这个字符. 假如待匹配字符串包含指定字符串并且匹配正则表达式,则为真,假如待匹配字符串不包含指定字符串但是匹配正则表达式,也为真,假如其他情况为假. 看一段简单的代码示例: private static String s = "1"; public static void main(String[] args) { testOne(s); } private static void testOne(String s){ System.out.println

  • 深入浅解正则表达式在Java中的使用

    介绍 •正则表达式一般用于字符串匹配, 字符串查找和字符串替换. 别小看它的作用, 在工作学习中灵活运用正则表达式处理字符串能够大幅度提高效率, 编程的快乐来得就是这么简单. •一下子给出一堆匹配的规则可能会让人恐惧, 下面将由浅入深讲解正则表达式的使用. 从简单例子认识正则表达式匹配 •先上代码 public class Demo1 { public static void main(String[] args) { //字符串abc匹配正则表达式"...", 其中".&q

随机推荐