9

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

[.]和有什么区别.

我很惊讶.at会匹配“猫”但[.]at不会。

4

3 回答 3

20

[.].从字面上匹配点 ( ),同时.匹配除换行符 ( \n) 以外的任何字符(除非您使用DOTALL模式)。

您也可以使用\."\\."如果您使用 java 字符串文字)来逐字匹配点。

于 2013-09-05T15:33:09.183 回答
4

[]是允许您定义字符类字符。方括号中的任何内容都按字面意思解释。您也可以包含多个字符:

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

关于[...]语法,您需要了解两件具体的事情:

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

上面的两个结构 (^-) 对几乎所有正则表达式引擎都是通用的;一些引擎(例如 Java 的)定义了仅针对这些引擎的附加语法。

于 2013-09-05T15:37:50.050 回答
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("[.]","[.]"));
}

如果有什么遗漏请补充:)

于 2021-12-07T06:17:49.443 回答