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 或 其他字符 , 就可以正常匹配出结果。我想知道 这是为什么??? 展开
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 或 其他字符 , 就可以正常匹配出结果。我想知道 这是为什么??? 展开
4个回答
展开全部
因为默认情况下, "."不匹配行结束符
需要指定DotAll模式
Pattern patt = Pattern.compile("(<span.*?>)(.*)(</span>)",Pattern.CASE_INSENSITIVE);
改成
Pattern patt = Pattern.compile("(<span.*>)(.*)(</span>)",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
需要指定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的公有静态参数可以控制不处理换行符的,楼主自己看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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());
}
Pattern patt = Pattern.compile(".*[\r\n].*",Pattern.CASE_INSENSITIVE);
Matcher matc = patt.matcher(html);
while(matc.find()){
System.out.println(matc.group());
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询