2014-08-28 98 views
2

由于含有问号jsoup CSS选择器:逃逸问号

<h2 class="?class-text ">mark-text should be blue</h2> 

类如何用jsoup选择器中选择其标签?

我试图

doc.select("h2.\\?class-text") 
doc.select("h2.?class-text") 
doc.select("h2[class=?class-text]") 
doc.select("h2[class=\\?class-text]") 

但这些作品。

这一个工程

doc.select("h2[class*=class-text]") 

,但我想选择精确匹配。

JSFiddle for this

UPD:

doc.select("h2[class~=\\?class-text]") 

工作。但有没有正则表达式的解决方案?

+0

这不是正则表达式。实际上,这是一个无效的选择器,因为选择器中间有一个“。”。 – BoltClock 2014-08-28 14:28:21

+0

另外,你不能在JSFiddle中运行Java代码,所以小提琴是毫无意义的。该代码中的CSS选择符相当于Java代码中的'doc.select(“h2。\\?class-text”)',根据您的代码不工作;然而,小提琴的作品。 – BoltClock 2014-08-28 14:30:20

+0

糟糕,放置在h2和[class =]之间的点是错误的。我编辑了这篇文章。根据http://jsoup.org/cookbook/extracting-data/selector-syntax它是正则表达式:“[attr〜= regex]:元素的属性值匹配正则表达式” – ov7a 2014-08-29 08:14:36

回答

1

如果你想使用select那么你作为一个参数传递的东西最终将被视为一个正则表达式。你传递的字符串实际上是在matches方法String中传递的(这是对它实际做的过于简单化,但你明白了)。 Check this answer。如果你不想使用正则表达式,那么使用这个:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

public class Main { 

    public static void main(String[] args) { 
     try { 
      String str = "<div><h2 class=\"?class-text \">mark-text should be blue</h2></div>"; 
      Document doc = Jsoup.parse(str); 

      Elements el = doc.getElementsByClass("?class-text"); 
      System.out.println(el); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

我不知道所有的选择器里面都使用了正则表达式。我会使用〜=选择器,因为有时我需要用一个选择器来选择几个类 – ov7a 2014-08-29 11:02:55