代码如下,结果打印出“false”: public class TestRegExpre { public static void main(String[] args) { Pattern par = Pattern.compile("[\\w-.]+"); Matcher m = par.matcher("[email protected]"); print(m.matches()); } public static void print(Object o) { System.out.println(o); }}
public class TestRegExpre { public static void main(String[] args) {
Pattern par = Pattern.compile("[\\w-.]+");
Matcher m = par.matcher("[email protected]");
print(m.matches()); } public static void print(Object o) {
System.out.println(o);
}}
当正则中具有特殊意义的元字符放在字符组[]中时,只有有限的字符还是元字符,其它的都被转义了
1、“^”出现在开始位置
2、“-”前后构成范围区间
3、“\”一直是转义符,“[”和“]”在大多数语言中需要转义
其它元字符在字符组[]通常都只匹配字符本身,也就是[.]就只匹配小数点而已还有就是,如果按楼主的理解,小数点可以匹配任意字符,那么自然也就包含了“\w”和“-”,那楼主又为什么要多此一举,把它们和“.”放在一起取“或”呢
.只是不能匹配换行符“\n”,可以匹配除“\n”以外的任意字符,回车符“\r”是可以匹配的
当然这是指使用传统的NFA引擎的语言,如Java和javascript等而言,在有的引擎中,“.”是可以匹配包括“\n”在内的任意字符的
alert(/./.test('\r')) //false
alert(/./.test('\n')) //false
<script type="text/javascript">
document.write("abc\r\n".match(/.+/g)[0] + "<br />");
document.write("abc\r\n".match(/.+/g)[0].length + "<br />");
document.write(/./.test("\r") + "<br />");
document.write(/./.test("\n") + "<br />");
</script>
//输出
abc
4
true
false
alert(/./.test('\r')) //false
alert(/./.test('\n')) //falseie下的结果
alert(/./.test('\r')) //true
alert(/./.test('\n')) //false