۱۳۸۸/۰۵/۰۱

عبارات باقاعده‌اي در مورد كار با تگ‌ها


حذف تمامي تگ‌هاي يك عبارت HTML
اين تابع و عبارت باقاعده به كار رفته در آن هنگام جستجو بر روي يك فايل html كه حاوي انبوهي از تگ‌ها است مي‌تواند مفيد باشد و يا جهت حذف هر نوع فرمت اعمالي به يك متن.

private static readonly Regex _htmlRegex = new Regex("<.*?>", RegexOptions.Compiled);
/// <summary>
/// حذف تمامي تگ‌هاي موجود
/// </summary>
/// <param name="html">ورودي اچ تي ام ال</param>
/// <returns></returns>
public static string CleanTags(string html)
{
return _htmlRegex.Replace(html, string.Empty);
}

حذف يك تگ ويژه بدون حذف محتويات آن
فرض كنيد مي‌خواهيد تمام تگ‌هاي script بكار رفته در يك محتواي html را حذف كنيد.

private static readonly Regex _contentRegex = new Regex(@"<\/?script[^>]*?>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

/// <summary>
/// تنها حذف يك تگ ويژه
/// </summary>
/// <param name="html">ورودي اچ تي ام ال</param>
/// <returns></returns>
public static string CleanScriptTags(string html)
{
return _contentRegex.Replace(html, string.Empty);
}

حذف يك تگ خاص به همراه محتويات آن تگ
فرض كنيد مي‌خواهيم در محتواي html دريافتي اثري از تگ‌ها و كدهاي جاوا اسكريپتي يافت نشود.

private static readonly Regex _safeStrRegex = new Regex(@"<script[^>]*?>[\s\S]*?<\/script>",
RegexOptions.Compiled | RegexOptions.IgnoreCase);

/// <summary>
/// حذف يك تگ ويژه به همراه محتويات آن
/// </summary>
/// <param name="html">ورودي اچ تي ام ال</param>
/// <returns></returns>
public static string CleanScriptsTagsAndContents(string html)
{
return _safeStrRegex.Replace(html, "");
}

و اگر فرض كنيم كه متدهاي فوق در كلاسي به نام CRegExHelper قرار گرفته‌اند، كلاس آزمون واحد آن به صورت زير مي‌تواند باشد:

using NUnit.Framework;

namespace testWinForms87
{
[TestFixture]
public class CTestRegExHelper
{
#region Methods (3)

// Public Methods (3)

[Test]
public void TestCleanScriptsTagsAndContents()
{
Assert.AreEqual(
CRegExHelper.CleanScriptsTagsAndContents("data1 <script> ... </script> data2"),
"data1 data2");
}

[Test]
public void TestCleanScriptTags()
{
Assert.AreEqual(
CRegExHelper.CleanScriptTags("<b>data1</b> <script> ... </script> data2"),
"<b>data1</b> ... data2");
}

[Test]
public void TestCleanTags()
{
Assert.AreEqual(
CRegExHelper.CleanTags("<b>data</b>"),
"data");
}

#endregion Methods
}

}