import java.util.regex.Matcher;
import java.util.regex.Pattern;public class B { public static void main(String[] args) {
String s = "ab,cde,ggg\r\ng;" ;
Pattern p = Pattern.compile(".+?[;,]");
Matcher m = p.matcher(s);
while(m.find()){
System.out.println( m.group() );
}
}
}
运行结果:
ab,
cde,
g;这里,s中的\r\n前面的三个g没有了,只得到\r\n后面那个,我想要ggg\r\ng这个也能完整保留下来
怎么办?谢谢!
import java.util.regex.Pattern;public class B { public static void main(String[] args) {
String s = "ab,cde,ggg\r\ng;" ;
Pattern p = Pattern.compile(".+?[;,]");
Matcher m = p.matcher(s);
while(m.find()){
System.out.println( m.group() );
}
}
}
运行结果:
ab,
cde,
g;这里,s中的\r\n前面的三个g没有了,只得到\r\n后面那个,我想要ggg\r\ng这个也能完整保留下来
怎么办?谢谢!
String s = "ab,cde,ggg\r\ng;" ; String pattern = "((.|[\r\n])+?)[;,]";
Pattern p = Pattern.compile(pattern,Pattern.MULTILINE);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println("["+ m.group() +"]");
}
String s = "ab,cde,ggg\\r\\ng;" ; String pattern = "((.|[\r\n])+?)[;,]";
Pattern p = Pattern.compile(pattern,Pattern.MULTILINE);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println("["+ m.group() +"]");
}
System.out.println("<Start>"+s+"<End>");
只要在Pattern.compile的时候,加上Pattern.DOTALL的选项,那么你的那个也可以正常运行。
至于你将$替换掉[\r\n]之后为什么不行,我想是语义不同吧(好久不用regex了,既不太清楚了)
aaaaaaaaaaaaaaaa\r\n
这个算是一行,我如果将$替换为b的话
那么,上一行就会变成aaaaaaaaaaaaaaaab\r\n
这样你就会看清楚了,$是在\r\n之前和该行最后字符之间这个位置,也就是说$和\r\n的语义是不一样的
呵呵,这回应该讲清楚了吧?!
(.|[\r\n])+?
和
[.\n]+?有什么不同?
以上
和
[.\n]+?我的运行结果不一样,why?
结果:
1
[ab,]
[cde,]
[ggg
g;]2
[
]
这是为什么呢?
当pattern = "[.\n]+?[;,]";的时候,什么结果也没有?
另一个问题 问号和尖括号在regex中怎么表示?
有兴趣一边上网一边赚钱吗?,赚的还是美元呢。
您想轻松做兼职,超过自己的薪水!!
这绝对是真实的,cctv-10都报道了它的可信性!
特别是上班时能上网的朋友,只要能上网就能赚钱,不用你费心
详情请登陆http://freemoneycn.home4u.china.com/
立即注册http://www.cashfiesta.com/php/join.php?ref=freemoneynj
假设一下是匹配内容:aaaaaaa回车
bbbbbbb回车1-如果以[.\n\]来连续find的话,那么这种pattern最终只能匹配所有的回车字符;
2-如果以(.|\n)来连续匹配并find的话,那么这种pattern匹配以上内容的所有字符,即,单个的a,b以及回车;
3-改用[a-z\n]来匹配的话,与第二种方法匹配结果相同;
4-改用第一种pattern匹配“aaaa.bbbb回车”内容,则会匹配内容中的"."和“回车”
所以,最终得出结论,"."在[] 里面已经失去其代表所有除了回车以外字符的意义,而纯粹就是代表"."。
故此得出结论,二者语义不同。对于"toppi(从天而降) "的问题,你可以在指定pattern的时候,直接用\Q和\E将你的pattern包裹起来,这样,不过什么字符,在pattern中都会保持其原来的意义,也就是.还是.,\ 还是\。OK,以上。