java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java内嵌标志表达式使用

Java正则表达式之内嵌标志表达式的用法详解

作者:yaoxin521123

本文详细介绍Embedded Flag Expressions(内嵌标志表达式)及其用如何简化正则写匹配过程,并提供示例说明如何使用,同时对比外部flag和Pattern Flags)及其在不同Java代码中的应用,需要的朋友可以参考下

在前面我们介绍了 Pattern Flags,通常通过 Pattern.compile(regex, flags) 来开启模式。其实,还有一种更灵活的写法:把 flag 直接写进正则表达式里,这就是 Embedded Flag Expressions(内嵌标志表达式)

什么是 Embedded Flag Expressions?

语法:

(?flag)regex

这种方式的好处是 正则自带“开关”,更直观,也更容易共享或移植。

示例:(?i)忽略大小写

String regex = "(?i)foo";  // 内嵌 flag
String input = "FOOfooFoOfoO";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println("Found: " + matcher.group());
}

✅ 输出:

Found: FOO
Found: foo
Found: FoO
Found: foO

Pattern.CASE_INSENSITIVE 效果一样,但写法更紧凑。

内嵌 flag 对照表

Pattern 常量内嵌 flag说明
Pattern.CASE_INSENSITIVE(?i)忽略大小写
Pattern.COMMENTS(?x)忽略空格和 # 注释
Pattern.MULTILINE(?m)^ $ 匹配每一行
Pattern.DOTALL(?s). 可以匹配换行符
Pattern.UNICODE_CASE(?u)Unicode 下大小写敏感
Pattern.UNIX_LINES(?d)仅识别 \n 作为换行符
Pattern.CANON_EQ❌ 无内嵌形式
Pattern.LITERAL❌ 无内嵌形式

示例:(?m)多行模式

String regex = "(?m)^dog$";
String input = "dog\ncat\ndog";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);

while (m.find()) {
    System.out.println("Match: " + m.group());
}

✅ 输出:

Match: dog
Match: dog

^dog$ 在多行模式下匹配每行的 "dog",而不是整个文本。

示例:(?s)DOTALL 模式

String regex = "(?s)foo.bar";
String input = "foo\nbar";

System.out.println(Pattern.matches(regex, input)); // true

. 默认不匹配换行,加了 (?s) 就能跨行匹配。

Pattern.matches静态方法

有时候我们只是想快速判断一个字符串是否匹配某个正则,不需要 Matcher 循环查找。这时可以用:

boolean result = Pattern.matches("\\d", "1");
System.out.println(result); // true

注意:

Pattern.compile(regex).matcher(input).matches();

示例对比:matches()vsfind()

Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher("a1b2c3");

System.out.println(m.matches()); // false,因为整个 "a1b2c3" 不是一个数字
m.reset();
while (m.find()) {
    System.out.println("Found: " + m.group());
}
// 输出:1, 2, 3

matches() 要求整串匹配,find() 只要找到子串即可。

总结

以上就是Java正则表达式之内嵌标志表达式的用法详解的详细内容,更多关于Java内嵌标志表达式使用的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文