PDA

View Full Version : سوال: در مورد System.Text.RegularExpressions



yashar666
جمعه 09 تیر 1391, 21:40 عصر
متد split کلاس Regex با split کلاس string چه فرقی می کنه ؟

string[] i;
string[] v = new string[] { textBox2.Text };
i = textBox1.Text.Split(v, StringSplitOptions.None);
foreach (String b in i) ;

listBox1.Items.Add(i);

}
or

string input = "plum--pear";
string pattern = "-";

string[] substrings = Regex.Split(input, pattern);
foreach (string match in substrings)
{
listBox1.Items.Add(substrings);
}



و کلا Regex به چه دردی می خوره

tooraj_azizi_1035
شنبه 10 تیر 1391, 19:58 عصر
سلام
منظور از خود Regular expression عبارتی است که موتور Regular expression آن را در متنی بزرگ پیدا می کند.
Regular expression یک موتور در .NET Framework محسوب می شود که برای پردازش رشته ها به شکل قدرتمند، منعطف مورد استفاده قرار می گیرد.
این موتور با استفاده از کلاس Regex در اختیار برنامه نویس قرار می گیرد. وظیفه این موتور parse و کامپایل عبارت داده شده در متن داده شده و سپس اجرای عملیاتی الگوی مورد نظر را در متن داده شده Match می کند.

using System;
using System.Text.RegularExpressions;

public class Example
{
public static void Main()
{
string[] values = { "111-22-3333", "111-2-3333"};
string pattern = @"^\d{3}-\d{2}-\d{4}$";
foreach (string value in values) {
if (Regex.IsMatch(value, pattern))
Console.WriteLine("{0} is a valid SSN.", value);
else
Console.WriteLine("{0}: Invalid", value);
}
}
}
// The example displays the following output:
// 111-22-3333 is a valid SSN.
// 111-2-3333: Invalid




در این مثال هم می تونی تفاوت متد Split کلاس String و کلاس Regex را متوجه بشی:


string input = @"07/14/2007";
string pattern = @"(-)|(/)";

foreach (string result in Regex.Split(input, pattern))
{
Console.WriteLine("'{0}'", result);
}
// In .NET 1.0 and 1.1, the method returns an array of
// 3 elements, as follows:
// '07'
// '14'
// '2007'
//
// In .NET 2.0, the method returns an array of
// 5 elements, as follows:
// '07'
// '/'
// '14'
// '/'
// '2007'




مثال زیر نشان می دهد که چطور باید مطمئن شد که یک رشته داده شده دارای فرمت ایمیل درست است:


using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class RegexUtilities
{
bool invalid = false;

public bool IsValidEmail(string strIn)
{
invalid = false;
if (String.IsNullOrEmpty(strIn))
return false;

// Use IdnMapping class to convert Unicode domain names.
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper);
if (invalid)
return false;

// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn,
@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
RegexOptions.IgnoreCase);
}

private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();

string domainName = match.Groups[2].Value;
try {
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException) {
invalid = true;
}
return match.Groups[1].Value + domainName;
}
}


منبع: http://msdn.microsoft.com/en-us/library/hs600312.aspx