![](/img/trans.png)
[英]How to extract a substring which is repeated from a long string using regex
[英]How to exclude occurrence of a substring from a string using regex?
我在下面兩個forms中有一個字符串輸入。
1.
<!--XYZdfdjf., 15456, hdfv.4002-->
<!DOCTYPE
2.
<!--XYZdfdjf., 15456, hdfv.4002
<!DOCTYPE
如果遇到表單 2 並且不匹配表單 1,我想返回一個匹配項。因此,基本上我想要一個正則表達式,它可以任意接受<!--
和<!DOCTYPE
之間的所有字符,除非出現-->
介於兩者之間。
我正在使用模式、匹配器和 java 正則表達式。 根據 Pattern.compile() 專用的正則表達式尋求幫助
提前致謝。
Pattern p = Pattern.compile("(?s)<!--(?:(?!-->).)*<!DOCTYPE");
(?:(?.-->).)*
一次匹配一個字符,在檢查它不是-->
的第一個字符之后。
(?s)
設置 DOTALL 模式(又名單行模式),允許.
匹配換行符。
如果可能有兩個或多個匹配項,並且您想單獨查找它們,則可以將*
替換為非貪婪*?
,像這樣:
"(?s)<!--(?:(?!-->).)*?<!DOCTYPE"
例如,將該正則表達式應用於問題文本將找到兩個匹配項,而原始正則表達式將找到一個更長的匹配項。
這似乎很容易通過使用String.contains()
解決:
if (yourHtml.contains("-->")) {
// exclude
} else {
// extract the content you need
String content =
yourHtml.substring("<!--".length(), yourHtml.indexOf("<!DOCTYPE"));
}
我覺得你看得太遠了。
\<!--([\s\S](?!--\>))*?(?=\<\!DOCTYPE)
這使用負前瞻來防止-->和正前瞻來查找<!DOCTYPE Here's a good reference for atomic assertions (lookahead and behind) 。
我沒有方便的測試系統,所以我不能給你正則表達式,但你應該在 Pattern 文檔中查看稱為negative lookahead assertion
的東西。 這使您可以表達以下形式的規則:如果沒有后跟,則匹配此。
它應該可以幫助你:)
正則表達式可能不是您問題的最佳答案。 您是否嘗試過將第一行與其他所有內容分開並查看它是否包含-->
?
具體來說,類似:
String htmlString;
String firstLine = htmlString.split("\r?\n")[0];
if(firstLine.contains("-->"))
;//no match
//match
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.