java 用正则 筛选掉特殊符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 用正则 筛选掉特殊符号相关的知识,希望对你有一定的参考价值。

http:\/\/video.sina.com.cn\/p\/eladies\/nx\/v\/style\/2010\/1202\/121261198619.html?opsubject_id=eladies-596
这个是我要匹配的字符串
中间有许多"\",我需要用正则剔除掉"\",生成一个正常的url
我挺急的,在线等,谢谢大家了
重点是这个"用正则"
因为项目的需要,需要尽可能的考虑可能出现的情况,现在想看看这种url能不能单纯的用正则解决

参考技术A Pattern p = Pattern.compile("[0-9\\+-/*()^ ]+");
Matcher m1 = p.matcher("3 * ( 5 * ( 5 - 2 ) ) - 9");
Matcher m2 = p.matcher("2 * 3 * 4 - 8 + 9 / 3 / 3");
Matcher m3 = p.matcher("( ( ( 3 ^ 4 ) ) )");
System.out.println(m1.matches());
System.out.println(m2.matches());
System.out.println(m3.matches());

上面的代码我已经测试过了,你试试吧~!
加号+在JAVA中有特殊的含义(字符串的连接),所以表示加号+必须要用\\+
参考技术B 定义字符串的时候需要转移才可以
public static void main(String[] args) throws Exception

String s="http:\\/\\/video.sina.com.cn\\/p\\/eladies\\/nx\\/v\\/style\\/2010\\/1202\\/121261198619.html?opsubject_id=eladies-596";
System.out.println(s);
System.out.print(s.replaceAll("\\\\",""));


输出结果

http:\/\/video.sina.com.cn\/p\/eladies\/nx\/v\/style\/2010\/1202\/121261198619.html?opsubject_id=eladies-596
http://video.sina.com.cn/p/eladies/nx/v/style/2010/1202/121261198619.html?opsubject_id=eladies-596
参考技术C String s = "http:\\/\\/video.sina.com.cn\\/p\\/eladies\\/nx\\/v\\/style\\/2010\\/1202\\/121261198619.html?opsubject_id=eladies-596";

s.replaceAll("\\\\", "");

“\”需要进行转义成“\\”,Java一些特殊符号进行相关转义的。楼主可以搜搜看看这些的
参考技术D 首先java里面\在字符串中需要转义,转移就是在这个\前再加一个\

所以你定义:String s="http:\\/\\/video.sina.com.cn\\/p\\/eladies\\/nx\\/v\\/style\\/2010\\/1202\\/121261198619.html?opsubject_id=eladies-596";

String result = s.replace("\\", "");
第5个回答  2010-12-09 String s=" http:\/\/video.sina.com.cn\/p\/eladies\/nx\/v\/style\/2010\/1202\/121261198619.html?opsubject_id=eladies-596";
String c=s.replaceAll("/","");

OK了。要只用是吧\去除那么这样就可以了。
具体参见JDK

replaceAll("把字符串里的什么","全部替换成什么");
replace("把字符串里的第一个什么","替换成什么");
这样。

JAVA代码如下
public static void main(String aa[])

String str="http:\\/\\/video.sina.com.cn\\/p\\/eladies\\/nx\\/v\\/style\\" +
"/2010\\/1202\\/121261198619.html?opsubject_id=eladies-596";
System.out.println(str);
String regex="\\\\";
Pattern p= Pattern.compile(regex);
Matcher m=p.matcher(str);
String s=m.replaceAll("");
System.out.println(s);


若复杂只用修改regex对象表达式就可以了。。本回答被提问者和网友采纳

java用正则表达式判定特殊字符是不是,存在就替换的问题?

我在String ss = "aabbcc[dd]eeff[gg]hhiijjkkll[mmnn]oopp";这个字符串,用正则表达式把[]这样的特殊字符过滤出来,就是把[dd]替换成dd,原来的字符串里面也变成aabbccddeeff...

String的replaceAll方法可以使用正则表达式进行搜索并替换,但不改变原字符串,如果需要改变原字符串,则需要用赋值语句:
ss=ss.replaceAll("正则表达式","替换内容");
比如将"aabbcc[dd]eeff[gg]hhiijjkkll[mmnn]oopp"里的[等特殊符号去掉:
ss=ss.replaceAll("\W","");
参考技术A 至少有两种正则表达式的方法:

1、直接调用String类的replaceAll(String regex, String replacement)方法

代码:
String ss = "aabbcc[dd]eeff[gg]hhiijjkkll[mmnn]oopp";
ss.replaceAll("[\\[\\]\\\\]", "");//返回结果,可打印或返回
优点:简单
缺点:不具有通用性,需求变动则不适用,例如[dd]替换成DD

2、通过匹配规则来截取字符串

代码:
String ss = "aabbcc[dd]eeff[gg]hhiijjkkll[mmnn]oopp";
//正则表达式,表示由非[、]、、的任意字符构成
String tmp = "[^\\[^\\^\\]^\\.]";
//正则表达式,由5组构成第一组是普通字符串,第二组是"["字符串,第三组是普通字符串,第四组是"]"字符串,第五组是普通字符串
Pattern pattern = Pattern.compile("(" + tmp + "*)(\\[\\)(" + tmp + "*)(\\\\])(" + tmp + "*)");
Matcher matcher = pattern.matcher(ss);
StringBuffer result = new StringBuffer();
while(matcher.find())
result.append(matcher.group(1) + matcher.group(3) + matcher.group(5));

//result就是最终结果。

优点:具有一定的通用性,可自己定制需要的字符串,新字符串可以由原字符串的部分组成,也可与其他字符拼装,能更好满足可重用性,例如需求变更成[dd]替换成DD,代码只需将result.append(matcher.group(1)+matcher.group(3)+matcher.group(5));换成result.append(matcher.group(1)+matcher.group(3).toUpperCase()+matcher.group(5));就能完成

缺点:代码较长

PS:StringBuffer可转化成String再返回
参考技术B [\[\\\]]+

在java中

String ss = ss.replaceAll("[\\[\\\\\\]]+", "");

以上是关于java 用正则 筛选掉特殊符号的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式特殊符号及用法

Java正则——不允许中文,只允许数字+字母+部分特殊符号

Java正则校验密码至少包含:字母数字特殊符号中的2种

php怎样过滤掉特殊字符啊 ☺

带有正则表达式替换的特殊符号

iOS 正则表达式去除特殊符号