最近用了好多正则表达式,都是循规蹈矩的在前面加上^在后面加上$
像这个样子"^[.]\S+$",但实际上我在eclipse和editplus下都试了一下,不加前缀和后缀也是可以的。
代码如下
import java.util.*; import java.util.regex.Pattern; import java.util.regex.Matcher; class Test1 { public static void main(String[] args) { String str="asdf dsgsdf"; String regx="[\w]+[\s]+[\w]+"; Pattern pat=Pattern.compile(regx); Matcher mat=pat.matcher(str); boolean bool=mat.matches(); //String end=mat.replaceAll(""); System.out.println(bool); } }
运行结果是true。
这样写的话,运行也是true
class Test1 { public static void main(String[] args) { String str="asdf dsgsdf"; String regx="\w+\s+\w+"; Pattern pat=Pattern.compile(regx); Matcher mat=pat.matcher(str); boolean bool=mat.matches(); //String end=mat.replaceAll(""); System.out.println(bool); } }
所以,在以上这种情况下,不加[ ]和()是没有任何问题的。当然,加上也是没有问题的。。
至于为啥都要加两个反斜线\,首先,w匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
单纯的w,java是识别不出这个转义的,反斜线本身需要再转义一下,这样java就能识别出这个转义序列了。
所以,在java中必须要写成\w,\s等。