• Java —— 正则表达式


    0. 注意

    • 正则表达式里的点号(.),可以匹配除换行符之外的所有字符
    • Java 语言同其他语言中的正则表达式的不同在于:
      • 对 (反斜线)的不同处理
        • \:其他语言中,表示在正则表达式中插入普通的反斜线(字面上的),不要赋予它任何的意义;
        • 而在 Java 中,\:我要插入一个正则表达式的反斜线(构成正则式),其后的字符具有特殊的意义;
          • \d:表示一位数字;
      • \+⇒ 加号,\.⇒ 点;
    • 提取单词:\W+(一个或多个字母)
    • 括号
      • 小括号:提取匹配的字符串,(s*):匹配连续空格
        • (0-9) 匹配 0-9 本身,
        • [0-9]*:匹配数字,可以为空;
        • {1-9}:错误写法;
      • 中括号:定义匹配的范围,[a-zA-Z0-9] 相应位置匹配英文字符和数字,
        • [s*]:表示匹配空格或星号;
      • 大括号,表示匹配的长度,s{3}:匹配三个空格,s[1, 3]:一到三个空格;

    1. Java 中支持正则的类

    • String

      • str.matches(pattern):布尔判断,返回 true、false;

        • ’+911’.matches(‘(-|+)?d+’) ⇒ true,
        • ‘(-|+)?d+’ ⇒ 数字,以加号或者减号开头,或者没有任何符号;
        • 密码中必须包含至少一个数字(\w*\d\w*):
        password.matches("\w*\d\w*")
    • StringBuffer

    • StringTokenizer

    2. 定义模式,完成模式(pattern)的匹配(match)

    • java.lang.String ⇒ java(去掉字符和点)

      Pattern p = Pattern.compile("\w+\.");
      p.match(str).replaceAll("");
      • W+:表示非单词([^w]w: [a-zA-Z0-9]);

    创建模式,进行匹配的步骤如下:

    • 使用 (static)Pattern.compile() 静态方法编译正则表达式,其会根据 String 类型的正则表达式生成一个 Pattern 对象,(Pattern 类是对 String 类在实现正则匹配等功能上的丰富与拓展)
    • 把你想要检索的字符串传入 Pattern 对象的 matcher() 方法,matcher() 方法会返回一个 Matcher 对象那个,其内有十分丰富的函数实现:

      // 我们实现对待检索的字符串 abcabcabcdefabc 的 (abc){2,} 模式的匹配
      
      Pattern p = Pattern.compile("abcabcabcdefabc");
      Matcher m = Matcher.match("(abc){2,}");
      // 迭代器,遍历和迭代进行
      while (m.find()) {
          System.out.println("Match "" + m.group() + "" at position "
              + m.start() + "-" + (m.end()-1));
      }

    3. 对日志文件的扫描解析

    如下形式的日志文件:

    String logData = "" +
                "58.27.82.161@02/10/2005
    " +
                "204.45.234.40@02/11/2005
    ";

    逐行扫描,分别将其中的时间和 ip 提取出来。

    String pattern = "(\d+[.]\d+[.]\d+[.]\d+@)" + 
        "(\d+{2}/\d{2}/\d{4})";
    Scanner scanner = new Scanner(logData);     // 创建对日志文件扫描的扫描器对象
    while (scanner.hasNext(pattern)) {
        scanner.next(pattern);
        MatchResult m = scanner.match();
        String original = m.group(0);
        String ip = m.group(1);
        String date = m.group(2);
        System.out.format("%s: %s from %s
    ", original, date, ip);
    }
  • 相关阅读:
    Python修饰器 ,控制授权,通过ini配置文件 使用密钥 给函数限制试用期和过期后试用次数
    excel vba 自定义函数 使用正则表达式提取字符串
    python 值比较判断,np.nan is np.nan 却 np.nan != np.nan ,pandas 单个数据框/单元格 值判断nan
    python 读取中文CSV 'gbk' codec can't decode bytes in position 2-3:illegal multibyte sequence
    python ipython [Errno 22] invalid mode ('rb') or filename 、IDE工作路径
    windows下 python 添加PYTHONPATH 环境变量
    pandas(python2) 读取中文数据,处理中文列名
    qq邮箱 微信提醒不通知
    python :import error
    python推荐淘宝物美价廉商品 2.0
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421213.html
Copyright © 2020-2023  润新知