java求正则表达式

2399 2011-08-31 10:13:12
java中匹配下面这些信息
<%
aaa
Random random = new Random();
int num = random.nextInt(10);
out.print(num);
request.setAttribute("a",num);
session.setAttribute("a",num);
request.getRequestDispatcher("/form/forword1.jsp").forward(request,response);
%>

就是匹配被<% %>包围的,包括多行情况下,就是上面的也会匹配。单行的会写
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
打油的程序员 2011-08-31
  • 打赏
  • 举报
回复

import java.io.*;
import java.util.regex.*;

public class TestMatch {
public static String read(String filename) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(filename));
String s;
StringBuffer sb = new StringBuffer();
while ((s = br.readLine()) != null) {
sb.append(s + "\n");
}
br.close();
return sb.toString();
}


public static void main(String[] args) throws IOException {

String sourceString = read(getFileName(TestMatch.class));//将这个文件用sourceString保存
Pattern p = Pattern.compile(".*?<%(.*?)%>.*?", Pattern.DOTALL);
/*
这个文件作为测试数据 插入一些内容1 <% aaa Random random = new Random(); int num =
random.nextInt(10); out.print(num); request.setAttribute("a",num);
session.setAttribute("a",num);
request.getRequestDispatcher("/form/forword1.jsp").forward(request,response); %>
这个文件作为测试数据 插入一些内容2 <% 这个文件作为测试数据 插入一些内容3 %> 这个文件作为测试数据 插入一些内容4
<% 这个文件作为测试数据 插入一些内容5 %> 这个文件作为测试数据 插入一些内容6
*/

System.out.println("-------------------------------------------------");
Matcher m = p.matcher(sourceString);
while (m.find()) {
System.out.println(m.group(1));
}

}
static <T> String getFileName(Class<T> c) {//获得当前文件的文件路径
return "./src/" + c.getSimpleName() + ".java";// 注释;
}
}





输出结果:
(.*?)
aaa Random random = new Random(); int num =
random.nextInt(10); out.print(num); request.setAttribute("a",num);
session.setAttribute("a",num);
request.getRequestDispatcher("/form/forword1.jsp").forward(request,response);
这个文件作为测试数据 插入一些内容3
这个文件作为测试数据 插入一些内容5

OPPPPOP 2011-08-31
  • 打赏
  • 举报
回复
例子简单 但这类问题很有难度
神经斌 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sd4261829 的回复:]
“.”居然和空白字符匹不上啊,才发现
[/Quote]
自我更正一下,刚才试了,“.”能和部分空白字符匹配,但是和"\n"不行,有谁能说说"\n"和"\r"的区别?
顺便问大家一下,我昵称改完了怎么显示不出来呢,有谁知道?
shuwei003 2011-08-31
  • 打赏
  • 举报
回复
这个简单,只要让.可以匹配换行即可:

Pattern.compile("<%(.+?)%>",Pattern.DOTALL)
火光闪耀 2011-08-31
  • 打赏
  • 举报
回复
<%([^<%>]*)%>
上面用的这个就很好

神经斌 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asland1986 的回复:]
Pattern.compile("<%([^%]+)%>")
[/Quote]
这个可能不严谨吧,"<% %>"中间不能出现"%"吗?
神经斌 2011-08-31
  • 打赏
  • 举报
回复
这个行<%([\s|\S]*)%>, “.”居然和空白字符匹不上啊,才发现
albertshaw 2011-08-31
  • 打赏
  • 举报
回复

String test = "<%\n"
+ "aaa\n"
+ "Random random = new Random();\n"
+ "int num = random.nextInt(10);\n"
+ "out.print(num);\n"
+ "request.setAttribute(\"a\",num);\n"
+ "session.setAttribute(\"a\",num);\n"
+ "request.getRequestDispatcher(\"/form/forword1.jsp\").forward(request,response);\n"
+ "%>";
Matcher m = Pattern.compile("(?s)<%(.*?)%>").matcher(test);
if (m.find()) {
System.out.println(m.group(1));
}


混分路过..
winking 2011-08-31
  • 打赏
  • 举报
回复
Pattern.compile("<%([^%]+)%>")

或者StringUtils.substringBetween(str,"%", "%")
风火轮 2011-08-31
  • 打赏
  • 举报
回复
public static List<String> parser(String html, String rex) {
int i = 0;
List<String> l = new ArrayList<String>();
Pattern p = Pattern.compile(rex);
Matcher m = p.matcher(html);
while (m.find()) {

if (m.group(1)!=null){
l.add(m.group(1));
}
i = 1;
}
if (i == 0) {
l.add("");
}
return l;
}


String html="页面内容";
html=html.replace=("\r\n","").repalce("<%","\r\n<%").replace("%>","%>\r\n");
List<String> hh=parser(html,"<%([^<%>]*)%>");
hh.get(0);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧