2011-05-25 25 views

回答

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

使用反斜线点:\.

+0

我们在这里Java世界中,他可能需要转义反斜线以及“\\”。 – 2011-05-25 10:07:54

+1

@詹姆斯 - 这可能是真的,但取决于字符串被指定的位置。如果它在Java源代码中,那么是的,但如果它来自配置文件(或任何其他非源位置),那么它不会。我不会将其作为答案的一部分,因为这是正确的,正则表达式字符串需要是'\'。你输入的方式可能因环境而异,但恕我直言不在问题的范围之内。 – 2011-05-25 10:12:26

2

来搜索您通常需要逃避它一个正则表达式一个点,因为它是一个特殊字符。

使用\.来逃避。

您不必逃避,如果它是一个捕获组的一部分:

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

2

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

如果你要求如何在正则表达式中包含文字.字符,则需要转义它 - 这在(几乎?)所有正则表达式引擎意味着在其前面带有反斜杠。

例如,正则表达式:

P\..R 

装置 “的资本P,然后过一段,那么任何字符,则资本R(。)”,并且将匹配

P.AR 
P..R 
P.$R 

但不

PEAR 
PA.R 
P. 
P\.AR 

0

角色。是。

例如,如果你想获得的字母和点:[。\ w]

+

+2

“人物是。”只在你的例子中的字符类中。通常'''必须逃脱。 – stema 2011-05-25 10:14:52