你如何编写一个允许特殊字符DOT的正则表达式?

时间:2011-05-25 10:04:03

标签: java regex

如何编写允许用户名中的字符DOT(。)的正则表达式?

例如:

R. Robert
X. A. Pauline 

5 个答案:

答案 0 :(得分:5)

使用反斜杠逃离点:\.

答案 1 :(得分:3)

[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'

答案 2 :(得分:2)

要在正则表达式中搜索一个点,你通常需要将其转义,因为它是一个特殊字符。

使用\.来逃避。

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

[A-Za-z.]会搜索字母和'。'字符。

答案 3 :(得分:2)

你的问题不是很明确 - 对于初学者来说,正则表达式不会“允许”或“禁止”任何内容,它们只是匹配(或不匹配)文本。这是调用正则表达式的代码,它将决定做什么(例如正则表达式搜索无效字符的部分匹配,或指定整个白名单的匹配等?)。

在行之间阅读,如果你要求如何在正则表达式中包含文字.字符,你需要将其转义 - 在(几乎?)所有正则表达式引擎意味着在它前面加上反斜杠

例如,正则表达式:

P\..R

表示“大写P,然后是句点(。),然后是任何字符,然后是大写R”,并且匹配

P.AR
P..R
P.$R

但不是

PEAR
PA.R
P.
P\.AR

答案 4 :(得分:0)

角色。是。

例如,如果你想获得字母和点:

[\瓦特] +