簡體   English   中英

如何使用正則表達式從字符串中排除 substring 的出現?

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

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