美文网首页
Java 正则表达式之字符串匹配

Java 正则表达式之字符串匹配

作者: Tinyspot | 来源:发表于2023-10-25 21:16 被阅读0次

1. 正则字符

1.1 转义字符

  • Java 中 \\ 代表其他语言中的一个 \
    • 数字 \\d
    • 反斜杠 \\\\
    • \\.
    • 空白字符 \\s
  • 正则特殊符号 * . ? + $ ^ [ ] ( ) { } | \ /

1.2 字符匹配

字符 描述
. 匹配任意单个字符 (除\n)
\s 匹配任意空白字符,包括空格、制表符、换页符等等。等价[ \f\n\r\t\v]
? {0, 1}, 可选
+ {1, }
* {0, }
[...] 匹配字符组中的任意单个字符
[^…] 排除型字符组

2. 量词匹配

  • 通用形式 {m,n} (逗号之间不能有空格)
  • {n} 出现 N 次
  • {m,} 至少 m 次
  • {0,n} 最多 N 次,隐式的上限是65536
  • {m,n} 出现 m ~ n 次
  • 常用量词
    • * 等价 {0,}
    • + 等价 {1,}
    • ? 等价 {0,1}

2.1 匹配任意字符

注:单独的 .* 会匹配到空白字符

@Test
public void anyChar() {
    String input = "3.141592653";

    String regex = ".*";
    Matcher matcher = Pattern.compile(regex).matcher(input);

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

改为 .+

2.2 匹配点

@Test
public void dotMatch() {
    String data = "3.141592653";
    String regex = "\\.";
    String result = data.replaceAll(regex, "-");
    System.out.println(result);
}

2.3 ? 匹配:可有可无

@Test
public void stringMatch() {
    String regex = "(\\+86|0086)?-?\\d{11}";
    boolean phone = "+86-18823238789".matches(regex);
    boolean phone2 = "0086-18823238789".matches(regex);
    boolean phone3 = "18823238789".matches(regex);
}

3. 字符串匹配

String.matches(String regex)

public final class String {
    public boolean matches(String regex) {
      return Pattern.matches(regex, this);
    }
}

3.1 String.matches(String regex)

@Test
public void stringMatch2() {

    boolean words = "abc".matches("...");
    boolean words2 = "abc".matches(".{3}");
    boolean ip = "192.168.10".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
    boolean mail = "Tinyspot@163.com".matches("\\w+@\\w+\\.(com|cn)");
}

4. 字符串替换

4.1 replaceAll(regex, str)

示例一:删除文本中的所有数字

@Test
public void test() {
    String str = "aa12bb44ee";
    String result = str.replaceAll("\\d+", "");
}

4.2 通配符匹配替换

@Test
public void test() {
    String str = "123a45bcd";
    String result = str.replaceAll("\\d?", "-");
    String result2 = str.replaceAll("\\d*", "-");

    // ----a---b-c-d-
    // --a--b-c-d-
}

输出结果

# result
----a---b-c-d-
# result2
--a--b-c-d-

注意:空字符串也会被匹配到,然后被替换为 -

4.3 分组匹配替换 $

示例:超过 10 个数字,改为字符串

@Test
public void groupReplace() {
    /**
     * {
     *     "1001": [
     *         "id": 1234567890123,
     *         "itemId": 123456789
     *     ],
     *     "1002": [
     *         "id": 12345,
     *         "itemId": 1234567890123
     *     ]
     * }
     */
    String jsonStr = "{\"1001\":[\"id\":1234567890123,\"itemId\":123456789],\"1002\":[\"id\":12345,\"itemId\":1234567890123]}";

    String result = jsonStr.replaceAll("(\\d{10,})", "\"$1\"");
    System.out.println(result);
}

替换结果:

{
    "1001": [
        "id": "1234567890123",
        "itemId": 123456789
    ],
    "1002": [
        "id": 12345,
        "itemId": "1234567890123"
    ]
}

5. 其他

5.1 开始符(^)和结束符($)

示例:去除首尾的0

@Test
public void test() {
    String data = "00230045000";
    String start = data.replaceAll("^(0+)", "");
    String end = data.replaceAll("(0+)$", "");
    System.out.println(start + "; " + end);

    String result = data.replaceAll("^0+(.*?)0+$", "$1");
    System.out.println(result);
}

打印结果

230045000; 00230045
230045

5.2 字符边界

  • \b 匹配一个单词边界
  • 光标前面的字符和后面的字符不全是 \w

5.3 空白行(whilte lines)

" \n" 空格加换行,空白行

@Test
public void whileLines() {
    String lines = " \n".replaceAll("^\\s*$", "----");

    String lines2 = " \n".replaceAll("^[\\s&&[^\\n]]*$", "----");

    boolean matches = " \n".matches("^[\\s&&[^\\n]]*\\n$");
}

相关文章

  • java 与 scala 正则表达式

    java 与 scala 正则表达式 本篇文章用于比较java与scala正则表达式的差别 检查某个字符串是否匹配...

  • 数组转字符串 字符串转数组

    字符串转数组 使用Java split() 方法 split() 方法根据匹配给定的正则表达式来拆分字符串。 注意...

  • Python基础(15)——正则表达式

    re.match() re.match(正则表达式,要匹配的字符串),匹配出以字符串的起始位置开始匹配正则表达式,...

  • 2018-10-31

    java正则表达式常用一般是: 全局匹配字符串 Pattern.compile(“”).matcher("").m...

  • 正则表达式

    正则表达式主要用于字符串的查找、匹配、分割 match(正则表达式字符串,需要匹配的字符串) 1.不带任何正则符号...

  • 正则表达式语法(以python为例)

    一个正则表达式(或RE)指定了一集与之匹配的字符串;模块内的函数可以让你检查某个字符串是否跟给定的正则表达式匹配(...

  • 正则表达式(java)

    一、正则表达式简介 正则表达式是一个很常见的技术,用于在各种字符串的规则匹配中 二、在Java中使用正则表达式 我...

  • Java正则表达式

    定义:正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式使用单个字符串来描述、匹配一系...

  • 正则re表达式python

    说明pattern--匹配的正则表达式string--要匹配的字符串repl --要替换的字符串flags--匹配...

  • R学习笔记(7):使用stringr处理字符串(2)

    目标:结合正则表达式,实现 确定与某种模式匹配的字符串找出匹配位置提取匹配内容替换匹配内容基于匹配拆分字符串 1....

网友评论

      本文标题:Java 正则表达式之字符串匹配

      本文链接:https://www.haomeiwen.com/subject/llxyidtx.html