2016-03-18 53 views
3
Pattern srcAttrPattern = Pattern.compile("(?i)(?<=src=\")[^\"]*(?<!\")"); 
Matcher srcMatcher=srcAttrPattern.matcher("src=\"\""); 
System.out.println(srcMatcher.find()); 

這會打印錯誤。我如何解釋上述代碼?是否需要修改以上代碼的src =「」以滿足空字符串和填充字符串的目的。該聲明基本上與html內容的<img>中的src標籤匹配。正則表達式不匹配空字符串

+0

刪除'(<?! 「)' –

+1

您可以刪除最後斷言,但不保證DBL報價末,將其更改爲'(?=」)'。但是爲什麼要慢慢地用乾燥的斷言來解決所有的問題。使用更合理的'src =「(。*?)」' – sln

回答

2

請注意,要解析HTML,最好使用一些專用解析器(例如Jsoup)。

至於匹配src=""字符串的當前問題,最後的負向lookbehind要求當前位置之前的字符不是引號。由於您使用的是否定字符類[^"]*(0以外的"以外的字符),因此您並不需要這個後顧之憂。

刪除(?<!"),您將匹配src=""中的空字符串與"(?i)(?<=src=\")[^\"]*"

regex demo