簡體   English   中英

匹配HTML正則表達式Java中的第n個數字

[英]match the n th number in an HTML regex java

您好,我需要在字符串中查找匹配項的第二次出現

我有一個類似“

<span class="test">
  example
</span>
<span class="test">
  example1
</span>
<span class="test">
  example2
</span>

我需要從我嘗試過的內容中提取示例1 (?:<span class="test"){2}(.*?)</span>但它不起作用。

請不要說不要在正則表達式中使用HTML解析器。 我知道我別無選擇。

下面的正則表達式:

<span class="test">\\s*(.*?)\\s*</span>

將產生如下捕獲:

        [0] =>   example
        [1] =>   example1
        [2] =>   example2

您可以參考你喜歡哪一個。

但是,如果由於某種原因您不能引用特定的捕獲(我無法想象為什么不這樣做,那么這是一種學術上的理解),那么以下內容將返回第二個捕獲:

<span class="test">(?s).*?</span>\\s*<span class="test">\\s*(.*?)\\s*</span>

注意使用的“單行模式”,由指定的(?s) 這意味着. 也將匹配換行符。 在Java中,這可以通過使用啟用DOTALL選擇,如果你正在使用的.compile()方法。

嘗試這個:

(?:<span class="test".*?</span>)\s*<span[^>]*>\s*(.*?)\s*</span>

所需結果是唯一匹配的組。 為此,您需要使用DOTALL標志。

嘗試這個:

String text = "<span class=\"test\">  example</span>\n<span class=\"test\">  example1</span>\n<span class=\"test\">  example2</span>";
Matcher m1 = Pattern.compile("<span class=\\\"test\\\">(.*?)<\\/span>").matcher(text);
ArrayList<String> matches = new ArrayList<String>();
while(m1.find()){
   matches.add(m1.group(1).trim());
}
System.out.println(matches.get(1));

您的正則表達式應如下所示:

<span class="test">example([0-9]*)</span>

然后,您可以使用p = Pattern.compile( regex )編譯模式,並使用m = p.matcher( str )獲得匹配器。

通過調用m.find() ,匹配器將找到模式的下一次出現。 m.group( 1 )將在example后面給出數字。

要獲得第二次出現,請兩次調用m.find()並調用m.group( 1 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM