簡體   English   中英

我的正則表達式出了什么問題

[英]What's wrong with my regex

是的我知道使用RegEx解析HTML通常是一個壞主意,但除此之外,有人可以解釋這里的錯誤:

 string outputString = Regex.Replace(inputString, @"<?(?i:script|embed|object|frameset|frame|iframe|metalink|style|html|img|layer|ilayer|meta|applet)(.|\n)*?>", "");
if (outputString != inputString)
{
   Console.WriteLine("unwanted tags detected");
}

它當然會檢測到預期的標簽,如: <script><html> ,但它也拒絕我想要允許的字符串,例如<B>Description</B><A href="http://www.mylink.com/index.html">A Link containing 'HTML'</A>

我認為問題是第一個問號

<?(?i:script

您可能希望匹配結束html標記中的前導“/”字符,對吧? 我認為問號使“<”可選(零或一個匹配)。

我建議使用

<(/)?(?i:script

但我不是RegEx專家......

我不確定你是如何用C#做的,但似乎你忘了讓你的正則表達式不敏感。

從我看來它只需要一點點推動:

改變

"<?(?i:script|...|applet)(.|\n)*?>"

"\<(?i:script|...|applet)(.|\n)*?\>"

因為字符<>是特殊的

我會改變

"<?(?i:script|...|meta|applet)(.|\n)*?>"

"</?(?:script|...|meta|applet)[^>]*>"

我並不完全熟悉Javascript Regex字符串,但我確實有一個參考資料,我熟悉正則表達式的基礎知識(偶爾我需要復習)。

\\ s完全是可選的 - 不需要它。 如果你願意,你可以保留它。 請注意,這不處理大寫標記。 你將需要處理這些作為額外的情況。

你可能不得不逃避字符串中的/。 你不需要嗎? 之后*因為*表示0到多,所以涵蓋可選。

我不確定,但我認為貪婪的*不會超過(?:)。

http://www.regular-expressions.info/quickstart.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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