2011-10-05 31 views
0

我需要一个模式匹配器来获取来自http响应主体的下面文本中的页面id值。Java匹配类

<meta name="ajs-page-id" content="262250"> 

我后来得到的内容值总是在responsebody中生成的。

回答

2
Pattern pat = Pattern.compile("<meta\\sname=\"ajs-page-id\"\\scontent=\"(\\d+)\">"); 

这显然是一个非常字面的模式...但组(1)应该返回数字作为字符串。 还没有测试过。

+0

我给它一个镜头,我可以添加机体响应这样:匹配= pattern.matcher(bodyResponse)或者我需要将其打入行? – user979587

+0

可能应该使用'\\ s +'也不能保证属性按顺序显示,尽管如此。 – MeBigFatGuy

+0

@ user979587你应该可以在整个文本上运行它。对matcher.find()的重复调用将按顺序遍历每个事件。 – gnomed

1

使用像jsoup这样的HTML解析器来解析和搜索零件。你不应该为此使用正则表达式。

例如,

String htmlStr = "<meta name=\"ajs-page-id\" content=\"262250\">"; 
Document doc = Jsoup.parse(htmlStr); 
Element meta = doc.select("meta[name=ajs-page-id]").first(); 
if (meta != null) 
{ 
    System.out.println(meta.attr("content")); 
} 
+0

这几乎肯定是更安全的,但取决于您计划用输入文本做什么,正则表达式几乎肯定会更快,并在内存中创建较少的对象。如果你很好地了解你的输入文本的范围,那么也可能不那么不安全。它是一种权衡,正如软件开发中的一切。为了安全起见,牺牲一些记忆和速度通常是可以的,但它并不适用于每个人(即我工作的公司非常关心性能)。 – gnomed

+1

那么你可能错过了提问者,因为他声称它不再在(现在删除的)“答案”中工作。我敢打赌,标签并没有停留在这种模式下,这就是为什么它不起作用,为什么它不得不被解析。我同意,如果_I_知道它永远不会改变,我可能会恢复使用正则表达式,但因为它似乎并非如此,所以这将是最好的选择。 –