Java正则表达式中的"[.]"与"."的区别

9

我正在尝试在Java中使用一些正则表达式,在调试代码时遇到了这个问题。

[.].之间有什么区别?

我很惊讶.at可以匹配“cat”,但[.]at却不能。


2
你有没有学习过正则表达式教程?.是元字符,可以匹配除换行符以外的任何字符。在字符类内部,它不再是元字符。 - Rohit Jain
是的,我一直在查看Oracle教程。 [abc]是一个字符类,匹配a、b或c。那么为什么[.]不像.那样工作呢? - GDanger
1
啊,我没明白,在它自己的字符类中它不再是元字符。谢谢。 - GDanger
3个回答

20

[.] 匹配点号 (.),而 . 则匹配除了换行符 (\n) 以外的任何字符(除非你使用 DOTALL 模式)。

你还可以使用 \. (如果你使用 Java 字符串字面量,则为 "\\.")来精确匹配点号。


1
任何字符,但不包括换行符(默认情况下); - sp00m

4

[] 是元字符,它们让你定义一个字符类。任何被方括号包含的内容都会被当做字面量解释。你也可以包含多个字符:

[.=*&^$] // Matches any single character from the list '.','=','*','&','^','$'

关于 [...] 语法,有两个特别需要知道的事情:

  • 组开头的符号 ^ 具有特殊含义:它反转了组所匹配的内容。例如,[^.] 匹配除了句点 . 以外的任何字符。
  • 破折号 - 表示两个字符之间的所有代码点。例如,[A-Z] 匹配任何一个大写字母。您可以多次使用破折号 - 例如,[A-Za-z0-9] 表示“任何一个大写或小写字母或数字”。

上述两种结构(^-)几乎是所有正则表达式引擎都通用的;一些引擎(例如 Java 的)定义了 仅适用于这些引擎的其他语法


你实际上也可以找到字符类的并集/交集/差集 ;) - sp00m
@sp00m 这是真的 - 谢谢,我编辑了答案来提到它。 - Sergey Kalinichenko

1

正则表达式构造

. => 任何字符(可能匹配行终止符,也可能不匹配)


要匹配点号 . ,请使用以下内容

[.] => it will matches a dot
\\. => it will matches a dot

注意: Java正则表达式中的字符类使用方括号“[ ]”定义,该子表达式匹配指定或可能字符集中的一个字符。

示例: 在字符串地址中用“[.]”替换每个“.”

public static void main(String[] args) {
    String address = "1.1.1.1";
    System.out.println(address.replaceAll("[.]","[.]"));
}

如果有遗漏,请添加 :)
(如果您需要翻译其他内容,请提供相关信息)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接