0

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

<span class=\"title\"> 

<\/span><br/><b>

我正在尝试使用此代码

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));

但它似乎没有做这项工作......我已经尝试了多次迭代并尝试在线研究示例,但我不确定我是否在正则表达式语法中做错了什么。帮助将不胜感激。

{"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"}

无效的

4

3 回答 3

1

m.group(0)总是返回与正则表达式匹配的整个字符串。看起来您想返回一个特定的组,因此您需要使用m.group(1)来获取与第一组匹配的文本,m.group(2)用于第二组,依此类推。在这个正则表达式中:

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

括号中的任何内容,除了以 开头的内容外(?,都算作一个组,因此其中的部分(.+?)是第二个捕获组,您可以尝试使用 . 检索它m.group(2)。在这种情况下,没有必要把这些<span东西放在括号里,所以你可以说

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

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

于 2013-10-28T17:20:59.057 回答
1

从设计的角度来看,使用正则表达式解析某些东西并不是一个好主意。我个人只是将内容包装在一个假标签中,然后使用 XML 解析器对其进行解析。会有开销,但你不使用正则表达式来解析 JSON,对吧?为什么不对 XML 做同样的事情?

于 2013-10-28T17:24:49.277 回答
0

试试这个带DOTALL模式的正则表达式,也避免多余的转义:

Pattern p = Pattern.compile("(?si)<span class=\"title\">(.+?)</span>");
于 2013-10-28T17:19:52.903 回答