java正则表达式问题

2025-04-25 11:41:50
推荐回答(3个)
回答1:

你是看的http://wenku.baidu.com/view/8ad29fee0975f46527d3e14f.html这个文档吧
他这篇文章有点小问题
(?:X)与(?>X)的区别在于(?>X)是不回溯的。例如被匹配的字符串为abcm
当表达式为a(?:b|bc)m是可以匹配的,而当表达式是a(?>b|bc)
(这个表达式写错了,应该是a(?>b|bc)m)
时是不能匹配的,因为当后者匹配到b时,由于已经匹配,就跳出了非捕获组,而不再次对组内的字符进行匹配。可以加快速度。

这篇文章不错,不过作者在细节方面就比较疏忽了。。
如果一定要按照a(?>b|bc)这个来看的话,
把表达式分解来看
a匹配a
(?>b|bc)这是一个非捕获组,当匹配到b或者bc的时候就直接跳出
得到结果ab或abc
可以通过与(?>bc|b)比较来看,结果是不一样的
或者将带匹配的字符传改一下“abdm”多试几次就可以知道结果

回答2:

String s="";
//匹配直接的内容,匹配结果不包含和
Pattern pattern=Pattern.compile("(?<=).*?(?=)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
//每次匹配结果,写入你的代码。这里是打印输出
    System.out.println(matcher.group());
}

注:(?<=pattern)表示匹配pattern开始的字符串,匹配结果不包含pattern。(?=pattern)同理。

如果要匹配pattern之外的,就把=换成!,即(?

回答3:

String[] arr = tableStr.split("");
for(String arrStr : arr){
System.out.println(arrStr.replaceAll("", " "));
}
这样就OK了。用JS写也可以按这个思路。