非常非常哈克(和真的不應該productionally使用),但:
C#
Regex.Replace(input, @"<[^>]+?\/?>", m => {
// here you can exclude specific tags such as `<a>` or maybe `<b>`, etc.
return Regex.IsMatch(m.Value, @"^<a\b|\/a>$") ? m.Value : String.Empty;
});
基本上,它只是需要出與<a ...>...</a>
異常每個HTML代碼。
注:這並不:
- 驗證,如果標籤被打開/關閉/嵌套正確。
- 驗證,如果
<>
實際上是HTML標籤(也許你的輸入在文本本身<
或>
?)
- 手柄「嵌套」
<>
標籤。 (如<img src="http://placeholde.it/100" alt="foo<Bar>"/>
會留下的"/>
剩餘輸出字符串)
下面是變成一個輔助方法同樣的事情:
// Mocks http://www.php.net/strip_tags
/// <summary>
/// Removed all HTML tags from the string and returned the purified result.
/// If supplied, tags matching <paramref name="allowedTags"/> will be left untouched.
/// </summary>
/// <param name="input">The input string.</param>
/// <param name="allowedTags">Tags to remain in the original input.</param>
/// <returns>Transformed input string.</returns>
static String StripTags(String input, params String[] allowedTags)
{
if (String.IsNullOrEmpty(input)) return input;
MatchEvaluator evaluator = m => String.Empty;
if (allowedTags != null && allowedTags.Length > 0)
{
Regex reAllowed = new Regex(String.Format(@"^<(?:{0})\b|\/(?:{0})>$", String.Join("|", allowedTags.Select(x => Regex.Escape(x)).ToArray())));
evaluator = m => reAllowed.IsMatch(m.Value) ? m.Value : String.Empty;
}
return Regex.Replace(input, @"<[^>]+?\/?>", evaluator);
}
// StripTags(input) -- all tags are removed
// StripTags(input, "a") -- all tags but <a> are removed
// StripTags(input, new[]{ "a" }) -- same as above
如果你想通過正則表達式來做到這一點(根據你的標籤),記住這一點:規則1:不要使用RegEx來解析HTML。規則2:如果您仍想使用RegEx解析HTML,請參閱規則1. [RegEx只能匹配常規語言,而HTML不是常規語言](http://stackoverflow.com/a/590789/930393) – freefaller
@ freefaller看起來像你在那裏與「爲了上帝的愛,沒有」建議在我面前。 :) –