亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個 group() 如何捕捉文本?

這個 group() 如何捕捉文本?

牧羊人nacy 2022-05-25 16:54:50
我遇到了這個 Hackerrank 問題,正則表達式應該匹配 HTML 標簽之間的字符串。正則表達式和字符串是String str="<h1>Hello World!</h1>";String regex="<(.+)>([^<]+)</\\1>";另外,如果“str”有多個類似的 HTML 標簽,String str="<h1><h1>Hello World!</h1></h1>"以及如何([^<]+)捕獲這個“str”,該怎么辦。我的問題是如何([^<]+)匹配 'str' 而不是([a-zA-Z]+)。如果完整的源代碼在這里:import java.util.regex.Matcher;import java.util.regex.Pattern;/* Solution assumes we can't have the symbol "<" as text between tags */public class Solution{    public static void main(String[] args){        Scanner scan = new Scanner(System.in);        int testCases = Integer.parseInt(scan.nextLine());        while (testCases-- > 0) {            String line = scan.nextLine();            boolean matchFound = false;            Pattern r = Pattern.compile(regex);            Matcher m = r.matcher(line);            while (m.find()) {                System.out.println(m.group(2));                matchFound = true;            }            if ( ! matchFound) {                System.out.println("None");            }        }    }}不要介意我是否愚蠢地問這個問題并提前謝謝你!
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

這個正則表達式保證你的字符串只包含一個標簽,假設 HTML 輸入格式良好。

首字母<(.+)>捕獲您的標簽的名稱。捕獲組還將獲得它可以獲得的任何屬性。由于+是一個貪婪的量詞,如果可以的話,它將捕獲多個標簽。

尾隨</\\1>與第一組捕獲的任何內容相匹配。這就是為什么如果您的 HTML 格式正確,則表達式不會捕獲多個標簽或帶有屬性的標簽:

  • 開始標簽<h1>,結束標簽</h1>?

  • 開始標簽<h1 attr="value">,結束標簽</h1>,但期待</h1 attr="value">

  • 開始標簽<h1><h2>,結束標簽</h2></h1>,但期待</h1><h2>

這就是為什么標簽可以.+相當安全地匹配,而內容必須匹配[^<]+。您要確保不抓取內容中的任何停留標簽,但允許使用任何其他字符。[^<]+(發音。“不<,至少一次)允許類似的事情!,但[A-za-z]肯定不會。


查看完整回答
反對 回復 2022-05-25
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

如果輸入字符串是,Hello World!([a-zA-z]+)由于感嘆號 (!) 和空格字符而無法正確匹配。

更清楚地說,這是每個正則表達式的含義:

  • ([a-zA-Z]+)匹配由字母(大寫或小寫)組成的序列(1 個或多個字符)

  • ([^<]+)只要字符不是< 字符,就匹配一個序列(1 個或多個字符)


查看完整回答
反對 回復 2022-05-25
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號