正则表达式[]匹配疑问

C4FE4597464E1BAA 2014-08-25 08:58:50
public class Test2 {
public static void main(String[] args) {
String ends = "^[@#$%^&*-_,,¥、]*";
String str=",[aaaaa";
System.out.print(Pattern.compile(ends).matcher(str).replaceAll(""));
}
}
这个的结果为什么是aaaaa,我并没有匹配[,为什么还是被替换了?
...全文
538 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
C4FE4597464E1BAA 2014-08-31
  • 打赏
  • 举报
回复
谢谢大家了啊。。这段时间有点忙,没来论坛,3Q
dzq584462393 2014-08-26
  • 打赏
  • 举报
回复
String ends = "^[@#$%^&*-_,,¥、]*"; 这句话是以[@#$%^&*-_,,¥、]其中一个开头,肯定匹配不上,应该是"[@#$%^&*-_,,¥、]*"这个就行了吧。你可以试试
末日哥 2014-08-26
  • 打赏
  • 举报
回复
引用 9 楼 scookiem 的回复:
[quote=引用 8 楼 fudongrifdr 的回复:] 你没了解[]中"-"的含义啊
版主解答下嘛,如果我要匹配我写的那个中括号里的内容,并且是开头的[/quote] 对连字符"-"进行转义啊,在字符组中连接符表示表示一个范围,你这就是因为 [ 在 * 和 _ 之间,所以被匹配上了
优游湖 2014-08-26
  • 打赏
  • 举报
回复
^ 行的开头 $ 行的结尾
C4FE4597464E1BAA 2014-08-26
  • 打赏
  • 举报
回复
引用 8 楼 fudongrifdr 的回复:
你没了解[]中"-"的含义啊
版主解答下嘛,如果我要匹配我写的那个中括号里的内容,并且是开头的
末日哥 2014-08-26
  • 打赏
  • 举报
回复
你没了解[]中"-"的含义啊
C4FE4597464E1BAA 2014-08-26
  • 打赏
  • 举报
回复
引用 4 楼 fudongrifdr 的回复:
这样你应该明白了吧
public class Test2 {
    public static void main(String[] args) {
        String ends = "[*-_]";
        String str="[";
        System.out.print(Pattern.compile(ends).matcher(str).matches());
    }
}
[]不是表示匹配其中任何一个么,但是怎么也把[也匹配了
C4FE4597464E1BAA 2014-08-26
  • 打赏
  • 举报
回复
引用 5 楼 w_l_o_v_e_c 的回复:
你是不是想把那些特殊字符全部用空代替?
嗯,对的,但是却把中括号也去掉了
w_l_o_v_e_c 2014-08-26
  • 打赏
  • 举报
回复
你是不是想把那些特殊字符全部用空代替?
末日哥 2014-08-26
  • 打赏
  • 举报
回复

这样你应该明白了吧
public class Test2 {
public static void main(String[] args) {
String ends = "[*-_]";
String str="[";
System.out.print(Pattern.compile(ends).matcher(str).matches());
}
}
砍柴少年 2014-08-26
  • 打赏
  • 举报
回复
在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,你只是想要匹配“-”这样的符号,那么它的前面要加上一个转义字符“\”。 String ends = "^[@#$%^&*\\-_,,¥、]*"; String str=",[aaaaa"; System.out.print(Pattern.compile(ends).matcher(str).replaceAll(""));
一大三千 2014-08-26
  • 打赏
  • 举报
回复
我也帮楼主写了一个,不知道是不是楼主要的结果,不是的话就是我会错意了:
import java.util.regex.Pattern;

public class TestRegex {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String ends = "[^\\[a]*";
        String str=",[aaaaa";
        System.out.print(Pattern.compile(ends).matcher(str).replaceAll(""));
	}

}
w_l_o_v_e_c 2014-08-26
  • 打赏
  • 举报
回复
或者一种更简单的: String pattern = "\\W"; String Str = "[-a+a#a$a%*&a]"; Str = Str.replaceAll(pattern, ""); System.out.println("str=["+Str+"]");
w_l_o_v_e_c 2014-08-26
  • 打赏
  • 举报
回复
String pattern = "([-+*/^\\&\\%\\#\\$()\\]\\[])"; String Str = "[-a+a#a$a%*&a]"; Str = Str.replaceAll(pattern, ""); System.out.println("str=["+Str+"]");
C4FE4597464E1BAA 2014-08-25
  • 打赏
  • 举报
回复
不是啊,看文档,在[]的外面,^表示开头 而且就算^是非,那也不对啊,那么a就不应该留下了,因为我后面还有*
rumlee 2014-08-25
  • 打赏
  • 举报
回复
你的正则表达式写的是不对的。 ^表示的是非,-表示得是从 到 所以你这种写法根本就有问题。 如果你希望替换这些特殊字符,正确的做法应是 String ends = "[@|#|$|%|^|&|*|\\-|_|,|,|¥|、|\\[|\\]]*";

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧