正则表达式 元字符 转义符号

来自姬鸿昌的知识库
跳到导航 跳到搜索

https://www.bilibili.com/video/BV1Eq4y1E79W/?p=6

基本介绍

如果要灵活地运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致为:

  • 限定符
  • 选择匹配符
  • 分组组合和反向引用符
  • 特殊字符
  • 字符匹配符
  • 定位符




元字符(metacharactor)——转义号 \\

\\ 符号说明:在使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错。

案例:

用 $ 去匹配 “abc$(”会怎样?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc$(";

        String regStr = "$";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
找到:



用 ( 去匹配 “abc$(”会怎样?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc$)";

        String regStr = "(";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
 ^
	at java.util.regex.Pattern.error(Pattern.java:1955)
	at java.util.regex.Pattern.accept(Pattern.java:1813)
	at java.util.regex.Pattern.group0(Pattern.java:2908)
	at java.util.regex.Pattern.sequence(Pattern.java:2051)
	at java.util.regex.Pattern.expr(Pattern.java:1996)
	at java.util.regex.Pattern.compile(Pattern.java:1696)
	at java.util.regex.Pattern.<init>(Pattern.java:1351)
	at java.util.regex.Pattern.compile(Pattern.java:1028)
	at regular.RegExp02.main(RegExp02.java:17)

所以正确的代码应该是:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc$)";

        String regStr = "\\$";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
找到:$
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc$)";

        String regStr = "\\)";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
找到:)

注意:在 Java 的正则表达式中,\\ 代表其他语言中的一个 \ 。

需要用到转义符号的字符有:

.、*、+、(、)、$、/、\、?、[、]、^、{、}


再来一个.的示例

提取.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc.$)";

        String regStr = ".";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
找到:a
找到:b
找到:c
找到:.
找到:$
找到:)

其实应该是:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 演示转义字符的使用
 */
public class RegExp02 {

    public static void main(String[] args) {

        String content = "abc.$)";

        String regStr = "\\.";

        Pattern pattern = Pattern.compile(regStr);

        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {

            System.out.println("找到:" + matcher.group(0));

        }

    }
}
找到:.