PDA

View Full Version : سوال: Regex برای Domain Name



milade
پنج شنبه 24 بهمن 1387, 15:47 عصر
سلام
به یه Regex احتیاج دارم که وقتی ادرس www.site.com رو بهش میدم فقط site.com رو برگردونه یعنی :
اگه ادرس www ( فقط www نه ساب دومینها ) داشت رو حذف و نام دامین رو بازگشت بده

Mehdi Asgari
پنج شنبه 24 بهمن 1387, 16:21 عصر
^(http://)?(www.)?(?'maingroup'(\w+-?\w+\.)+\w+).*$
مثال:


Regex regex = new Regex(@"^(http://)?(www.)?(?'maingroup'(\w+-?\w+\.)+\w+).*$");
if (regex.IsMatch(input))
output = regex.Match(input).Groups["maingroup"].Value;

البته اگه میخوای بعد از com. بقیۀ عبارات رو هم match کنه ، اون *. آخر رو بیار داخل پرانتز:


^(http://)?(www.)?(?'maingroup'(\w+-?\w+\.)+\w+.*)$

اینم نوشتم تا تست کنم که کدم درسته (اگه موردی پیدا کردی که با کد من جواب نداد ،بگو تا عیب یابیش کنم)


Regex regex = new Regex(@"^(http://)?(www.)?(?'maingroup'(\w+-?\w+\.)+\w+).*$");
string[] urls = { "http://www.google.com", "google.com", "code.google.com", "123.info", "http://www.info-svc.com/news/2008/12-12/pm-evaluator/", "http://secunia.com/advisories/product/5883/?task=statistics" };
foreach (string s in urls)
{
if (regex.IsMatch(s))
Console.WriteLine(regex.Match(s).Groups["maingroup"].Value);
}

milade
پنج شنبه 24 بهمن 1387, 17:13 عصر
سلام استاد .
ممنونم از کدتون .
یه کم Regex کار کرده بودم اما نتونستم .
متاسفانه ماله شما یه مشکل کویچک داره ، اونم اینه که اگه من ادرس رو wwwgoogle.com وارد کنم تطبیق میده !
به این باز نویسی کردم و درست شد :

^(http://)?(www\.)(?'maingroup'(\w+-?\w+\.)+\w+.*)
اما متاسفانه یه مشکل دیگه !
اینو تطبیق نمیده ! :
www.goo.go.google.com (http://www.goo.go.google.com)
یعنی ساب ساب دومین !
من یه چیز میخوام که اگه حتی اگه ساب تو ساب هم شد نتیجه بر گردونه !
بازم سپاس گزاری میکنم .

Mehdi Asgari
پنج شنبه 24 بهمن 1387, 18:39 عصر
:متفکر:
این که اشتباهه. کدت رو اصلا نگاه نکردم ، ولی اگه بین www و بقیۀ رشته ، یک نقطه نباشه که اصلا اون یک آدرس صحیح برای سایت محسوب نمیشه (یعنی میشه ، منتها تعریف شما خیلی شخصیه. دقیقا ذکر کنید چی میخواید و به چه منظوری تا راحت تر بشه کمک کرد. امکان داره که در بخشی از کار (فهم مسئله یا طراحی برنامه) اشتباه می کنید)

اونم اینه که اگه من ادرس رو wwwgoogle.com وارد کنم تطبیق میده !
ما برنامۀ یادگیری ماشین یا هوش مصنوعی نمی نویسیم که اشتباهاتمون رو تشخیص بده. کامپیوتر بی شعوره ، همون کاری رو می کنه که بگی بهش

ما متاسفانه یه مشکل دیگه !
اینو تطبیق نمیده ! :
www.goo.go.google.com
یعنی ساب ساب دومین !
کد من برای این مثال شما درست جواب میده
مثال: (تست کردم درست جواب داد)


Regex regex = new Regex(@"^(http://)?(www.)?(?'maingroup'(\w+-?\w+\.)+\w+).*$");
string[] urls ={ "www.goo.go.mehdi.csharp.hello.google.com","http://11.22.33.34.46.58.6h.org","me.333.me.info"};
foreach(string input in urls)
if(regex.IsMatch(input))
Console.WriteLine(regex.Match(input).Groups["maingroup"].Value);

milade
پنج شنبه 24 بهمن 1387, 18:44 عصر
مشکل حل شد ^ رو برداشتم
ازتون مننونم مهدی جان
پیروز باشید