在java中使用正则表达式提取html语法中两个单词之间的字符串

在java中使用正则表达式提取html语法中两个单词之间的字符串,java,html,regex,Java,Html,Regex,我有一个json提要,它提供用于填充日历的html,我需要从中检索一些信息。例如标题、时间和地点。我想使用正则表达式在 <span class=\"title\"> 及 我正在尝试使用这个代码 for(int i = 0; i < json.length(); i++) { JSONObject object = new JSONObject(json.getJSONObject(i)); System.out.println(object.get

我有一个json提要,它提供用于填充日历的html,我需要从中检索一些信息。例如标题、时间和地点。我想使用正则表达式在

<span class=\"title\"> 


我正在尝试使用这个代码

for(int i = 0; i < json.length();  i++)
{
    JSONObject object = new JSONObject(json.getJSONObject(i));
    System.out.println(object.getNames(object));

    Pattern p = Pattern.compile("(?i)(<span class=\"title\">)(.+?)(<\\/span>)");
    Matcher m = p.matcher(json.get(0).toString());
    m.find();
    System.out.println(m.group(0));
for(int i=0;i
但它似乎不起作用……我尝试了多种方法,并尝试在网上搜索示例,但我不确定我是否在正则表达式语法方面做错了什么。如果您能提供帮助,我将不胜感激

{"hoverContent":"<b>Title: <\/b><span class=\"title\">Accounting Awareness<\/span><br/><b>Time: <\/b><span class=\"time\">5:30 PM - 6:30 PM<br/><b>Location: <\/b><span class=\"location\">1185 Grainger Hall<\/span><br/><b>Description: <\/b><br/><span class=\"description\">Information from Kristen Fuhremann, Director of Professional Programs in Accounting and Q&A from a panel of current and former students who will share their experiences in the accounting program. Panel includes a grad of the IMAcc program currently in law school, a candidate for the IMAcc program who studied abroad, an accounting and finance double major, and an IMAcc student who is also a TA for AIS 100. Casual Attire is appropriate.<br />Contact: Natalie Dickson, <a href=\"mailto:ndickson@wisc.edu\">ndickson@wisc.edu<\/a><\/span><br/>","title":"Accounting Awareness","start":"2013-09-30 17:30:00","allDay":false,"itemId":"2356754a-8178-4afd-b4cf-7f5f5ce89868","end":"2013-09-30 18:30:00"}
{“hoverContent”:"标题:会计意识
时间:下午5:30-6:30
地点:1185 Grainger Hall
描述:
来自会计专业项目总监Kristen Fuhremann的信息以及来自将分享其会计课程经验的现任和前任学生小组的问答。小组包括IMAcc课程的毕业生目前就读于法学院,是IMAcc项目的留学生,会计和金融双专业,同时也是AIS 100的助教。休闲装是合适的。
联系方式:Natalie Dickson,ndickson@wisc.edu
,“标题”:“会计意识”,“开始”:“2013-09-30 17:30:00”,“全天”:假,“项目ID”:2356754a-8178-4afd-b4cf-7F5CE89868,“结束”:“2013-09-30 18:30:00”

null

使用
DOTALL
模式尝试此正则表达式,同时避免重复转义:

Pattern p = Pattern.compile("(?si)<span class=\"title\">(.+?)</span>");
Pattern p=Pattern.compile(“(?si)(.+?)”);
m.group(0)
始终返回与正则表达式匹配的整个字符串。看起来您希望返回特定的组,因此需要使用
m.group(1)
获取与第一个组匹配的文本,第二个组使用
m.group(2)
,依此类推。在此正则表达式中:

"(?i)(<span class=\"title\">)(.+?)(<\\/span>)"

现在使用
m.group(1)
来获取第一个(也是唯一一个)捕获组。

从设计角度来看,使用regexp解析某些东西并不是一个好主意。
我个人只需要将内容包装在一个伪标记中,并使用XML解析器对其进行解析。这会带来开销,但您不会使用regexp解析JSON,对吗?为什么不对XML执行相同的操作?

所有内容都在一行吗?在“行”中。“regexp中的字符在行尾停止匹配是的,所有内容都在同一行上,至少它应该是一个完整的字符串,包含我要查找的内容。对于”“个字符,我是否应该运行”“的替换”“例如,”?因为我不在乎描述,我想这是我唯一会遇到句号的地方。我想你应该试试ajb的回答。看起来我在线程“main”java.lang.IllegalStateException中仍然会遇到这个错误异常:在eventDownload.downloadAndProcess.main的java.util.regex.Matcher.group(未知源代码)中找不到匹配项(downloadAndProcess.java:57)另外,有更多的/span>标记是否重要?它会与遇到的下一个/span>标记匹配?还是只选择字符串中的最后一个?请尝试保存
json.get(0).toString()
在变量中,然后在
p.matcher
中使用变量之前打印该变量。如果它看起来像您上面展示的那样,在引号之前带有反斜杠,那么您就遇到了问题,因为您的正则表达式没有查找反斜杠。是的,看起来是一样的。我如何添加或删除反斜杠?我可以通过gh并用空格替换所有的奇数字符?因为技术上我不需要它们。
json
的类型是什么?除了
toString
,可能还有其他方法可以用来返回真正的字符串值。但是不知道
json
是什么(以及您使用的是什么json库),这对我来说很难说。在线程“main”java.lang.IllegalStateException中尝试dotall模式异常时,我仍然会遇到相同的错误:在eventDownload.downloadAndProcess.main(downloadAndProcess.java:57)的java.util.regex.Matcher.group(未知源代码)中找不到匹配项。将其用作:
if(m.find())System.out.println(m.group(1));else System.out.println(“不匹配!”);
现在我只是得到了20次不匹配:(为此,您需要一个while循环作为
while(m.find()){System.out.println(m.group(1));}
您的意思是添加根标记吗?不,您只需将它们添加到源字符串中,然后解析.string source=”“+json.get(0).toString()+”;parser.parse(source);
"(?i)(<span class=\"title\">)(.+?)(<\\/span>)"
"(?i)<span class=\"title\">(.+?)<\\/span>"