Java 如何编写允许特殊字符点的正则表达式?

Java 如何编写允许特殊字符点的正则表达式?,java,regex,Java,Regex,如何编写允许在用户名中使用字符点(.)的正则表达式 例如: R. Robert X. A. Pauline [a-zA-Z.]+允许使用字母、点和空格字符 import java.util.regex.*; public class Test { public static void main(String [] args) throws Exception { String RE = "[a-zA-Z. ]+"; String name = args[0];

如何编写允许在用户名中使用字符点(.)的正则表达式

例如:

R. Robert
X. A. Pauline 

[a-zA-Z.]+
允许使用字母、点和空格字符

import java.util.regex.*;

public class Test {
  public static void main(String [] args) throws Exception {
    String RE = "[a-zA-Z. ]+";
    String name = args[0];
    Pattern pattern = Pattern.compile(RE);

    Matcher m = pattern.matcher(name);
    System.err.println("`" + RE + 
                       (m.matches()?"' matches `":"' does not match `") + 
                       name + "'");
  }
}
运行:

$ java Test "R. Robert"
`[a-zA-Z., ]+' matches `R. Robert'

$ java Test "R.-Robert"
`[a-zA-Z., ]+' does not match `R.-Robert'

用反斜杠转义点:
\。
要在正则表达式中搜索点,通常需要转义它,因为它是一个特殊字符

使用
\.
进行转义

如果它是捕获组的一部分,则不需要转义:


[A-Za-z.]
将搜索字母和“.”字符。

您的问题不是很清楚-对于初学者,正则表达式不“允许”或“不允许”任何内容,它们只匹配(或不匹配)文本。调用正则表达式的代码将决定要执行的操作(例如,正则表达式是否搜索无效字符的部分匹配项,或为整个白名单指定匹配项,等等)

在字里行间阅读,如果你想知道如何在正则表达式中包含一个文本
字符,你需要对它进行转义——这在(几乎?)所有正则表达式引擎中都意味着在它前面加一个反斜杠

例如,正则表达式:

P\..R
表示“大写字母p,然后是句号(.),然后是任意字符,然后是大写字母R”,并将匹配

P.AR
P..R
P.$R
但不是

PEAR
PA.R
P.
P\.AR
等等。

字符。是

例如,如果要获取字母和圆点:


[\w.]+

我们身处java世界,他可能也需要避开反斜杠“\\.”@James-这可能是真的,但取决于字符串的指定位置。如果它在Java源代码中,那么是的,但如果它来自配置文件(或任何其他非源代码位置),那么它不会。我不会把它作为答案的一部分,因为正则表达式字符串确实需要是
\。
;输入的方式可能因环境而异,但IMHO超出了问题的范围。“character.is.”仅在您的示例中的character类中。通常必须转义