我正在尝试在Java中使用一些正则表达式,在调试代码时遇到了这个问题。
[.]
和.
之间有什么区别?
我很惊讶.at
可以匹配“cat”,但[.]at
却不能。
[.]
匹配点号 (.
),而 .
则匹配除了换行符 (\n
) 以外的任何字符(除非你使用 DOTALL
模式)。
你还可以使用 \.
(如果你使用 Java 字符串字面量,则为 "\\."
)来精确匹配点号。
[
和 ]
是元字符,它们让你定义一个字符类。任何被方括号包含的内容都会被当做字面量解释。你也可以包含多个字符:
[.=*&^$] // Matches any single character from the list '.','=','*','&','^','$'
关于 [...]
语法,有两个特别需要知道的事情:
^
具有特殊含义:它反转了组所匹配的内容。例如,[^.]
匹配除了句点 .
以外的任何字符。-
表示两个字符之间的所有代码点。例如,[A-Z]
匹配任何一个大写字母。您可以多次使用破折号 - 例如,[A-Za-z0-9]
表示“任何一个大写或小写字母或数字”。上述两种结构(^
和 -
)几乎是所有正则表达式引擎都通用的;一些引擎(例如 Java 的)定义了 仅适用于这些引擎的其他语法。
. => 任何字符(可能匹配行终止符,也可能不匹配)
要匹配点号 . ,请使用以下内容
[.] => 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("[.]","[.]"));
}
.
是元字符,可以匹配除换行符以外的任何字符。在字符类内部,它不再是元字符。 - Rohit Jain[abc]
是一个字符类,匹配a、b或c。那么为什么[.]
不像.
那样工作呢? - GDanger