[英]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.