问题描述
|
如何编写允许用户名中包含字符DOT(。)的正则表达式?
例如:
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\'
,要在正则表达式中搜索点,通常需要对其进行转义,因为它是一个特殊字符。
用ѭ1逃脱。
如果它是捕获组的一部分,则无需逃脱:
[A-Za-z.]
将搜索字母和\。字符。
,您的问题不是很清楚-对于初学者而言,正则表达式不“允许”或“不允许”任何东西,它们仅匹配(或不匹配)文本。这是调用正则表达式的代码,该正则表达式将决定要执行的操作(例如,正则表达式是在搜索无效字符的部分匹配项,还是为整个白名单指定匹配项,等等?)。
在两行之间阅读时,如果您要问如何在正则表达式中包含原义ѭ7字符,则需要对其进行转义-这在(几乎所有)正则表达式引擎中都意味着在其前面加反斜杠。
例如,正则表达式:
P\\..R
表示\“大写字母P,然后是句点(。),然后是任何字符,然后是大写字母R \”,并且将匹配
P.AR
P..R
P.$R
但不是
PEAR
PA.R
P.
P\\.AR
等等
,性格 。是。
例如,如果要获取字母和点:
[\\ w。] +