java正则表达式对一些特殊字符匹配的理解
2017-04-11 18:22
399 查看
public static void match(String str){ //特殊字符在正则和字符串中都要转义,但是转义的方式不太相同 //正则表达式中,\\\\为一个\;而字符串String中,\\表示一个\ //正则表达式中,*,.,+,?,()等特殊字符需要两个斜杠加特殊字符表示,比如\\*表示一个*,而字符串中直接输入即可 //正则表达式中,\W,\d,D,\w等都需要双斜杠,比如\\w,\\W等,而制表符等表示空字符串的不需要 String pattern="\\\\\\*\\w+\\*/"; System.out.println(pattern); System.out.println(str); System.out.println(Pattern.matches(pattern, str)); } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.nextLine(); match(str); } }
这是我自己练习的内容,输入的字符串是这样的: \*abcd*/,凡是这种类似的字符串都会被匹配成功,关键的解释在代码注释中已经有了。写在这里帮助理解。
简单的解释一下,首先你要记住一点,正则表达式比较特殊,\\表示的是一个正则表达式的反斜线,而不是一个反斜线字符。或者说,\\\\四个反斜线才表示字符串中的两个反斜线\\,也就是要输出的一个反斜线\。
“\\\\\\*\\w+\\*/”为什么要这样写呢?我们一点一点的来看,首先是前四个反斜线\\\\,这个在正则表达式中表示一个反斜线\,而在字符串中表示两个反斜线\\。
接下来是\\*这个在正则表示的是一个*(因为*在正则中单独出现表示一个字符,需要一个转义也就是一个\,而这个\在正则中必须由两个\\来表示)。
\\w+表示一个或者多个字母,这个也是一样的道理,注意是双反斜线。
\\*表示一个*
/没有特殊含义,不需要转义
补充一点吧,也是看了这篇文章受到的启发http://blog.csdn.net/yaerfeng/article/details/28855587#reg3、
补充的内容是这样的,我们把regex和要匹配的字符串都通过控制台输入,那么输入的规则是啥呢?
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true) {
// String str = in.nextLine();
// match(str);
try {
System.out.println("Enter your regex:");
Pattern pattern = Pattern.compile(in.nextLine());
System.out.println("Enter input string to search:");
Matcher matcher = pattern.matcher(in.nextLine());
boolean found = false;
while (matcher.find()) {
System.out.println("I found the text \"" + matcher.group() + "\" starting at index"
+ matcher.start() + " and ending at index " + matcher.end());
found = true;
}
if (!found) {
System.out.println("No match found");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
代码很简单,只需要随便阅读以下即可,关键是几个输入的规则,regres的输入必须要满足什么条件呢?必须要满足普通String的条件,也就是说必须要转义,但是转义的规则不能是正则的规则,而是String的规则,相当于弱化了一层(正则强于String强于正常的输出),而普通的string输入呢?就按照你想匹配的文字输入即可。
再补充一句吧,对于^开头匹配和$结尾匹配,匹配的是一句话的完整的开头和结尾,而如果没有,^,可以从中间开始匹配;如果没有$,可以不用匹配到结尾,如果二者都没有,那就可能会有好多匹配的结果了,所以使用了matcher.find()啊。
相关文章推荐
- label 富文本编辑 多个关键字高亮 (一些特殊的字符有可能匹配不到 如:*)
- 一些特殊字符的英文读法
- 一些特殊字符的英文读法
- JS正则匹配特殊字符
- 一些特殊字符保存于此
- 关于java中的一些特殊字符处理
- size_t,__T,_T,TEXT,_TEXT等一些特殊宏的理解
- SQL 中单引号 和一些特殊字符的处理
- size_t,__T,_T,TEXT,_TEXT等一些特殊宏的理解
- (5)正则表达式 特殊字符的匹配
- BASH里的一些特殊字符
- PHP正则匹配汉字、字母、数字和下划线,不含特殊字符
- java中替换一些特殊字符的办法
- 一些特殊字符
- 字符匹配 真正理解KMP算法的力量 ( 修正)
- single character replace program 文本中单个字符的替换,支持一些特殊的字符。
- bash 当中一些常用的万用字符与特殊符号
- 文件操作及去除一些特殊字符
- 页面上一些乱七八糟的特殊字符
- 一些特殊字符的英文读法