java 正则 匹配 带有\R\N字符的 字符串问题

Stringhtml="<spancolor='red'style='display:none;'>颜色\r\n是红的</span>";Patternpatt=Patte... String html = "<span color='red' style='display:none;'>颜色\r\n是红的</span>";
Pattern patt = Pattern.compile("(<span.*?>)(.*)(</span>)",Pattern.CASE_INSENSITIVE);
Matcher matc = patt.matcher(html);
String startStr = "";
String htmlStr = "";
String endStr = "";
while(matc.find()){
startStr = matc.group(1);
htmlStr = matc.group(2);
endStr = matc.group(3);
}
System.out.println(htmlStr); 这段代码 得到的结果是“”空如果我把\R\N换成\T 或 其他字符 , 就可以正常匹配出结果。我想知道 这是为什么???
展开
 我来答
来自巢湖敬老慈幼的风车草
2013-03-28 · TA获得超过207个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:115万
展开全部
. 这个符号默认是不匹配换行符的,必须设置。
如:
Pattern patt = Pattern.compile("(<span.*?>)(.*)(</span>)",Pattern.DOTALL);
这样 . 就可以匹配换行符了。

同时建议楼主将 (.*) 替换为 ([\\s\\S]*),这样就不需要设置句点符号的格式而能匹配任何字符。

请采纳
rayregister
2013-03-28 · TA获得超过339个赞
知道小有建树答主
回答量:100
采纳率:100%
帮助的人:65.8万
展开全部
因为默认情况下, "."不匹配行结束符

需要指定DotAll模式
Pattern patt = Pattern.compile("(<span.*?>)(.*)(</span>)",Pattern.CASE_INSENSITIVE);
改成
Pattern patt = Pattern.compile("(<span.*>)(.*)(</span>)",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-03-29
展开全部
在java里面,'\'被当作转义字符,'\r'、'\n'分别表示回车换行,'\t'是制表符,这些楼主应当知道吧。我不明白楼主为何要在哪里加\r\n,是想要输出换行,还是想就显示成\r\n。至于这里为什么会出现这种结果,我猜测可能是Pattern类匹配时是按行来的,具体是不是这样,楼主可以自己用eclipse工具查看一下compile的源码。我这里现在没有工具,所以不能替你查了。compile("(<span.*?>)(.*)(</span>)",Pattern.CASE_INSENSITIVE);我认为应当有一个类似Pattern.CASE_INSENSITIVE的公有静态参数可以控制不处理换行符的,楼主自己看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
250701791
2013-03-29
知道答主
回答量:28
采纳率:0%
帮助的人:8.7万
展开全部
String html = "<span color='red' style='display:none;'>颜色\r\n是红的</span>";
Pattern patt = Pattern.compile(".*[\r\n].*",Pattern.CASE_INSENSITIVE);
Matcher matc = patt.matcher(html);
while(matc.find()){
System.out.println(matc.group());
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式