PDA

View Full Version : مقاله: عبارت باقاعده - Regular Expression



piroozman
جمعه 11 اردیبهشت 1388, 15:05 عصر
آموزش عبارات باقاعده در سکوی .NET Framework همراه با نرم افزار Expresso (http://www.ultrapico.com/)
قبل از پرداختن به مفاهیم اصلی عبارات باقاعده و ذکر مثالها توصیه می کنم ابتدا شما نرم افزار Expresso (http://www.ultrapico.com/) را که جهت تمرین و تست الگو های عبارات باقاعده طراحی و تولید شده است را از نشانی http://www.ultrapico.com (http://www.ultrapico.com/) دانلود کنید. این نرم افزار با استفاده از کتابخانه کلاسهای موجود در .NET Framewor می تواند شما را در تولید الگوهای عبارات باقاعده و استفاده از آنها در برنامه هایتان یاری نماید. ضمن این که Expresso (http://www.ultrapico.com/) دارای یک سری الگوهای عبارات باقاعده از پیش نوشته شده است که شما را در دسترسی سریع و آسان به الگوی عبارت باقاعده مدنظرتان بسیاری یاری خواهد کرد.
یک مفهوم نام آشنا در بسیاری از سیستمهای کامپیوتری استفاه از کاراکترهای "جایگزین شونده" یا "wildcard" ها در الگوهای تطبیقی(pattern matching) می باشد. اگر شما قصد داشته باشید تمامی فایلهای Microsoft Word را در یکی از شاخه های ویندوز بیابید از عبارت "*.doc"، برای جستجو استفاده خواهید کرد. علامت ستاره (asterisk) به عنوان یک wildcard ی که می تواند هر تعداد از کاراکترها را تطبیق دهد تفسیر خواهد شد.
در نوشتن برنامه ها یا صفحات وبی که با رشته ها و متون زیاد سر و کله می زنند اکثر اوقات شما به چنین الگوهایی حتی با پیچیدگی ها بسیار بیشتری نیاز خواهید داشت. خوب عبارات باقاعده هم به همین منظور ابداع و تولید شده است. سکوی .NET Framework یک مجموعه کامل از کتابخانه کلاس هایی که کاربرد عبارات باقاعده را در برنامه های کاربردی آسان می سازد برای شما فراهم کرده است. با این کتابخانه شما می توانید به آسانی متنی را جستجو و جایگزین نمایید، عنوان های پیچیده را رمزگشایی کنید، زبانها مختلف را تجزیه کنید یا اینکه متنی را اعتبار سنجی نمایید.
بهترین راه برای یادگیری سینتکس اسرار آمیز عبارات باقاعده استفاده از مثالها و تجربه کردن آنها در برنامه های مختلف می باشد. این مقاله اصول عبارات باقاعده را به شما معرفی خواهد کرد و تعداد زیادی مثال را که در یک فایل کتابخانه Expresso (http://www.ultrapico.com/) قرار دارد به شما ارائه می دهد. شما می توانید این نرم افزار را از نشانی http://www.ultrapico.com (http://www.ultrapico.com/) دانلود و در سیستم خود نصب نمایید.اما اصل کاربرد این نرم افزار جهت آزمایش نمودن مثالها و نیز تست کردن صحت عملکرد عبارات باقاعده ای است که خودتان نوشته اید و قصد دارید در برنامه ایتان به کار گیرید. اگر اجازه بدید شروع کنیم:
تعدادی مثال ساده . . .(ادامه مقاله) (http://pirooz.parsiblog.com)

<<باتوجه به اینکه حجم مقاله زیاد است و سینتکس عبارات باقاعده با کپی و پیست کردن اون در اینجا به هم میریزه مابقی مقاله رو می توانید در وبلاگم (http://pirooz.parsiblog.ocm) مطالعه کنید). ضمنا از کلیه دوستان خواهش می کنم فقط در مورد موضوع مطرح شده (یعنی عبارات باقاعده) تاپیک زده و بحث نمایند و مسائل متفرقه را به صورت پیام ارسال نمایند. با تشکر

salehbagheri
جمعه 11 اردیبهشت 1388, 18:30 عصر
شما دوست عزيز ميتونيد با جمع و جور كردن مقاله تون، با مجله برنامه نويس همكاري كنيد!

piroozman
سه شنبه 05 خرداد 1388, 03:16 صبح
در اين مقاله سعي در تشريح يکي از ساختارهاي پيچده و بحث انگيز با عنوان تعريف گروه موازنه با ذکر يک مثال را دارم. سينتکس اصلي گروه موازنه به صورت:
(?<name1-name2>subexpression)
است.
اين ساختار تطبيق قبلي که به وسيله گروه name2تعيين شده است را حذف مي کند و
در گروه name1فاصله (interval)ميان آنچه که گروه name2 تطبيق داده تا آنچه که گروه جاري (Balancinggroup) تطبيق داده است، ذخيره مي کند. اگر در گروه name2 مقداري وجود نداشته باشد، عمل تطبيق عقبگرد خواهد کرد.( backtrack - قابليت يک سيستم خبره در آزمايش راه حل هاي مختلف جهت يافتن يک پاسخ. راه حل هاي مختلف را مي توان همچون شاخه هاي يک درخت تصور کرد. در اين روش، برنامه مسير يک شاخه را دنبال مي کند و چنانچه بدون يافتن پاسخ به انتهاي آن برد، به عقب بازگشته و شاخه ديگري را آزمايش مي کند.) چون با حذفِ آخرين تطبيق انجام شده به وسيله name2، تطبيق قبلي که به وسيله name2 انجام گرفته شده است، نمايان مي شود، اين ساختار موجب مي شود، پشته حاصل از capture هاي گروه name2 همانند يک شمارشگر (counter) عمل کند و از اين شمارشگر مي توان جهت رديابي (Keep track of- دنبال کردن يک مسير - در مديريت داده ها به دنبال کردن جريان اطلاعات از طريق يک سيستم دستي يا خودکار گفته مي شود.) ساختارهاي تودرتو؛ مانند پرانتزها استفاده کرد(ساختارهاي تودرتو يا nest- گنجاندن يک ساختار در يک ساختار ديگر. به عنوان مثال يک بانک اطلاعاتي ممکن است يک جدول تودرتو (جدولي در جدول ديگر)، يک برنامه ممکن است يک رويه تودرتو(رويه اي که در يک رويه ديگر تعريف شده باشد) و يک ساختار داده اي نيز ممکن يک رکورد تودرتو (رکوردي که حاوي فيلدي است که خود يک رکورد است) داشته باشد. در اينجا منظور ساختارهاي تودرتو ايجاد شده به وسيله پرانتزها يا انواع براکتها مي باشد.). در اين ساختار، name1 اختياري است؛ و مي توان الگوي فوق را به شکل
(?<-name2>subexpression)نوشت. شما مي توانيد از single quote ها به جاي angle brackets استفاده کنيد؛ مانند (?'name1-name2'subexp). براي درک بهتر عملکرد اين ساختار به مابقی مقاله و مثال ارائه شده که در وبلاگم (http://pirooz.parsiblog.com/1014461.htm)قراردارد مراجعه کنید.

r00tkit
پنج شنبه 29 بهمن 1388, 10:09 صبح
آموزش عبارات باقاعده در سکوی .NET Framework همراه با نرم افزا
Expresso (http://www.ultrapico.com/)
.........

منبع:
http://www.codeproject.com/KB/dotnet/regextutorial.aspx

hrbaban
پنج شنبه 27 خرداد 1389, 20:32 عصر
با سلام . . .

چه Regex در برنامه Expresso بنويسم تا خروجي هاي زير كه توي عكس مشخصه ظاهر بشه .
يك روز ور رفتم اما نتونستم يه چيز درست از توش در بيارم .


http://www.justupit.com/files/X3RTLLAK/test.jpghttp://www.justupit.com/files/X3RTLLAK/test.jpg


ممنون .

hrbaban
پنج شنبه 27 خرداد 1389, 20:34 عصر
با سلام . . .

چه Regex در برنامه Expresso بنويسم تا خروجي هاي زير كه توي عكس مشخصه ظاهر بشه .
يك روز ور رفتم اما نتونستم يه چيز درست از توش در بيارم .


test.jpg (http://barnamenevis.org/forum/attachment.php?attachmentid=51338&stc=1&d=1276791916)


ممنون .

piroozman
پنج شنبه 27 خرداد 1389, 21:29 عصر
با سلام . . .

چه Regex در برنامه Expresso بنويسم تا . . . .

ممنون .

سلام
شما به طور دقیق بیان نکردید که در متن خود به دنبال چه عبارت هایی می گردید. الگوی خاصی از تصویر الصاقی شما عاید بنده نشد اما کدی که نوشتم رو امتحان کنید. اگر بیشتر توضیح بدهید که به دنبال چه چیزی هستید شاید بهتر بتونم کمکتون کنم. Regex ای که بنده با توجه به تصویر ارسالی شما به شرح ذیل است
[A-Z]-?\d*\.\d*
توضیح Regex:
1- [A-Z] حروف بزرگ انگلیسی را تطبیق می دهد(فقط یک حرف)
2- -? تعداد صفر یا یک - را تطبیق می دهد
3- \d* هر تعداد اعداد (از صفر تا هر چندتا) را تطبیق می دهد. لازم به ذکر است اگر شما بخواهید تعداد اعداد را در یک تعدادی خاص تطبیق دهید(مثلا حداقل 1 عدد و حداکثر 3 عدد) باید از عبارت \d{1,3} استفاده کنید و برای تطبیق یک یا بیشتر عدد از کد \d+ استفاده کنید.
4- و در نهایت \. کاراکتر نقطه (یا period) را تطبیق می دهد. چون این کاراکتر جزء متاکاراکتر ها محسوب می شود شما باید آنرا فراری دهید (اصطلاحاً escape کنید.)
موفق باشید.

hrbaban
جمعه 28 خرداد 1389, 22:30 عصر
راستش من يه فايل txt دارم كه توش يه سري x , y هستش با اعدادي كه جلوشون نوشته شده.

من ميخوام يه برنامه بنويسم كه يه فايل txt رو بررسي كنه و كليه x , y ها به همراه مقادير جلوشون رو در بياره و بعد روي اين x , y ها يه سري محاسبه انجام بشه. اما با توجه به اينكه ترتيب قرار گيري x , y ها متفاوت هستش يكم كار رو سخت ميكنه .

مثلا توي تصوير ، در سطر اول و آخر، x, y توي يه خط قرار دارند ولي در بقيه جاهاش يا فقط x هست و يا y.

به عبارت ساده تر مثل اين بمونه كه يه فايل متني ، خط به خط بررسي بشه و در هر خط ، همه چيز حذف بشه به جز x , y هاش و مقادير جلوشون .


حالا دنبال يه الگو ميگردم كه اين كار رو بكنه .

با سپاس.

piroozman
جمعه 28 خرداد 1389, 22:37 عصر
راستش من يه فايل txt دارم كه توش يه سري x , y هستش با اعدادي كه جلوشون . . . .
با سپاس.
سلام
اگر شما می خواهید فقط X و Y ها را تطبیق دهید در کلاس کاراکتر [A-Z] فقط دو حرف X و Y را بنویسد یعنی [XY]. اگر می خواهید حروف کوچک x و y نیز تطبیق پیدا کند می بایست کلاس کاراکتر خود را به شکل [XYxy] بنویسید.
عبارتی که بنده نوشته بودم تمامی حروف بزرگ انگلیسی را تطبیق می داد. اما فکر کنم با توضیح فوق بتوانید انچه را که می خواهید در متن خود بیابید.
باز هم اگر مشکلی در این خصوص داشتید بنده در خدمت شما هستم
سئوال خود را باز هم واضحتر بیان کنید تا شاید بتوانم کمکتان کنم
موفق باشید

hrbaban
شنبه 29 خرداد 1389, 12:45 عصر
آقا پيروز قبل از هر چيز از توجهتون ممنونم .
اما من اين كار رو كردم ولي توي اين حالت x,y ها هر كدوم در يه سطر جدا نوشته ميشند ، در صورتي كه من ميخوام اگر كنار هم هستند به صورت كنار هم بيان .

من فكر كنم خيلي واضح توضيح دادم اما به عكس زير يه نگاه بندازيد شايد بهتر كمك بكنه .

من ميخوام يه فايل متني ، خط به خط بررسي بشه و در هر خط ، همه چيز حذف بشه به جز x , y هاش و مقادير جلوشون .
با توجه به تصوير ، فرض كن توي يه فايل txt ، نوشته هاي سمت چپ (خاكستري) قرار داره و من حالا با يه برنامه ميخوام ، به شكل سمت راست (سفيد) در بياد .

piroozman
شنبه 29 خرداد 1389, 13:52 عصر
آقا پيروز قبل از هر چيز از توجهتون ممنونم .
من ميخوام يه فايل متني ، خط به خط بررسي بشه و در هر خط ، همه چيز حذف بشه به جز x , y هاش و مقادير جلوشون .
با توجه به تصوير ، فرض كن توي يه فايل txt ، نوشته هاي سمت چپ (خاكستري) قرار داره و من حالا با يه برنامه ميخوام ، به شكل سمت راست (سفيد) در بياد .
سلام
دوست عزیز، شما باید کل متن فایل تکست خود را به عنوان رشته ی ورودی به موتور عبارت باقاعده بدی و با جستجو در متن عبارتهایی که لازم داری رو روی یک فایل دیگه بنویسی.
فایل txt مورد نظرت رو برام بفرست تا روش کار کنم و اگه نتیجه گرفتم برات ارسالش کنم.
موفق باشی

epsi1on
شنبه 29 خرداد 1389, 20:20 عصر
آقا پيروز قبل از هر چيز از توجهتون ممنونم .
اما من اين كار رو كردم ولي توي اين حالت x,y ها هر كدوم در يه سطر جدا نوشته ميشند ، در صورتي كه من ميخوام اگر كنار هم هستند به صورت كنار هم بيان .

من فكر كنم خيلي واضح توضيح دادم اما به عكس زير يه نگاه بندازيد شايد بهتر كمك بكنه .

من ميخوام يه فايل متني ، خط به خط بررسي بشه و در هر خط ، همه چيز حذف بشه به جز x , y هاش و مقادير جلوشون .
با توجه به تصوير ، فرض كن توي يه فايل txt ، نوشته هاي سمت چپ (خاكستري) قرار داره و من حالا با يه برنامه ميخوام ، به شكل سمت راست (سفيد) در بياد .
با سلام.
با توجه به توضیحات دوست عزیزمون جناب pirooz در چند پست قبل فکر میکنم متوجه بشید این الگو چطور کار میکنه:

[XYxy]-?\d+\.?\d*و بتونید امتحانش هم بکنید.
خواستتون رو براورده میکنه؟ به نظر میاد مشکلی نداشته باشه...

hrbaban
چهارشنبه 09 تیر 1389, 18:20 عصر
آقا پيروز فايل متني رو براتون ارسال كردم .
نگاهش كردين ؟؟؟؟؟؟

bahar_1868
چهارشنبه 16 تیر 1389, 09:27 صبح
سلام سوال من اینه:
برنامه ای بنویسید که وروی های آن یک عبارت با قاعده و نام یک پرونده باشد و همه خطوط از پرونده را که حاوی زیر رشته تولید شده آن عبارت با قاعده باشد را تولید نماید.
اگه ممکنه بهم میل کنید:ناراحت:bahar_1868@yahoo.com

piroozman
دوشنبه 08 خرداد 1391, 19:03 عصر
با سلام و احترام خدمت کلیه عزیزانی که در حال حاضر دارند این تاپیک رو مطالعه می کنند. همانطور که می بینید موضوع این تاپیک در خصوص عبارات باقاعده می باشد. بنده مدتهاست که کتابی رو در این خصوص نوشته بودم و فقط یک فصل اون مونده بود و به خاطر برخی مشکلات نمی تونستم و وقت نمی کردم اون فصل رو به انتها برسونم. خدا قسمت کرد و بالاخره کتاب رو تموم کردم.
کتاب حاضر، که به صورت الکترونیکی است، سعی در شناخت یکی از زبانهای مهم و پرکاربرد امروز دنیا به نام عبارات باقاعده (Regular Expressions) دارد. عبارات باقاعده خود به تنهایی امکان تولید نرم افزار و برنامه های کاربردی را ندارند بلکه ابزاری هستند در اختیار سایر زبان های برنامه ساز مانند C#‎‎‎‎‎‎‎‎‎، VB،PHPو . . . . از دستورات و امکانات این زبان در تولید کامپایلرها، صفحات وب هوشمند و دقیق و برنامه های کاربردی مختلف در جهت تجزیه و تحلیل متون و رشته ها و جایگزینی آنها با سایر متون یا رشته ها استفاده می شود.
این کتاب بیشتر بر استفاده از این زبان جهت تجزیه و تحلیل رشته ها و متون در برنامه های کاربردی و کتابخانه های .NET Freamwork تولید شرکت مایکروسافت تاکید دارد. هر چند با مطالعه این کتاب شما خواهید توانست حتی در صفحات وب و سایر برنامه ها از ساختارهای تعریف شده برای عبارات باقاعده بهره برده و به اهداف خود برسید.
این کتاب در 7 فصل به رشته تحریر در آمده است که شامل از تعریف انواع کاراکترها، اجزای اصلی عبارات باقاعده شروع شده و به نحوه به کارگیری آن در زبانهای مختلف به خصوص دو زبان C#‎‎‎‎‎‎‎‎‎ و VB خاتمه می یابد.
هر چند سعی در این بوده که این کتاب بدون اشتباه باشد اما از کلیه عزیزانی که این کتاب را مطالعه می کنند تقاضا دارم نظرات، پیشنهادات، اشتباهات تایپی، برنامه ای، محتوایی و هر آنچه که در بهبود مطالب این کتاب موثر می باشد به نشانی Piroozman@gmail.com ارسال نمایند.
کلیه حقوق مادی و معنوی این کتاب نزد آقای محمد محمدی پیروز (نویسنده ی کتاب) محفوظ می باشد و استفاده از مطالب این کتاب با ذکر منبع بلامانع است.
این کتاب به صورت فایل PDF بوده و براي دريافت آن پيام خصوصي ارسال كنيد. موفق و مويد باشيد

mohamad72
پنج شنبه 07 شهریور 1392, 16:43 عصر
سلام
ببخشین من یه سوال داشتم من میخوام یه متنی رو از تو یه سایتی بردارم و بزارم تو یه لیبل تو نرم افزارم
میخواستم html agility یاد بگیرم ولی گفتن regex بهتره ولی آخه این چیزایی که شما نوشتید هیچ ربطی به کاری که من میخوام بکنم نداره
ینی به نظر شما من باید ریجکس باد بگیرم؟؟؟
حالا این عبارات با قاعده هم گیریم فول شدم خب حالا چطوری باش متن از تو سایت بردارم اخه؟؟؟

piroozman
پنج شنبه 07 شهریور 1392, 22:36 عصر
سلام. شما به راحتی با استفاده از الگوهایی که در عبارت باقاعده ایجاد می کنید، متنی را که با الگو مطابقت دارد را یافته و آنرا از داخل متن یا هر فایل دیگری که مدنظر دارید استخراج کنید. اگر کتابی که بنده در این خصوص نوشتم را مطالعه کنید سریع به جواب خواهید رسید. کتاب مورد نظر بسیار کامل است و شامل الگوها، مثال ها و سناریوهای مختلفی است و به دو زبان csharp و vb است. شما دقیقا بفرمایید دنبال چه متنی هستید، انشالله از دستم بر بیاد الگوی آنرا برای شما ارسال خواهم کرد و بیشتر شما را راهنمایی خواهم کرد. موفق باشید

mohamad72
پنج شنبه 07 شهریور 1392, 22:45 عصر
مرسی
بحث پیدا کردن الگو نیست
من میگم با چه کدی میشه از تو یه صفحه وب متن استخراج کرد
ینی بعد از این که الگو رو پیدا کردم حالا چطوری متن بردارم از یه صفحه وب

piroozman
شنبه 09 شهریور 1392, 09:33 صبح
شما می بایست متن موجود در یک صفحه وب را در یک فایل از نوع String قرار بدید و سپس در داخل اون به دنبال متن مورد نظر خودتون بگردید. به طور مثال:
System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");
string webData = System.Text.Encoding.UTF8.GetString(raw);

یا
System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm");

البته فکر کنم سرعت اجرای این کدها بسته به سرعت اینترنت شما یا سرعت سرور سایت مورد نظر تفاوت داشته باشد.
موفق باشید

meisam223
چهارشنبه 05 آذر 1393, 08:51 صبح
باسلام
من در کد HTML زیر می خوام با استفاده از RegEx اعداد مختصات جغرافیایی بعد از عبارت :'LAT' رو استخراج کنم، عبارات زیادی رو هم استفاده کردم که در برخی موارد صحیح هستند، اما من نیاز دارم که دقیقا مقدار روبروی:'LAT' بعد از عبارت Marker به عنوان اولین Match برگردانده بشه، میشه لطفا من رو راهنمایی کنید، کد:


<ul class="entityInfoContactsList">
<li>
مدیر -
علی رضا اثنی عشری
</li>
<li class="entity-contact-address" itemprop="address" itemtype="http://schema.org/PostalAddress" itemscope="">
<div class="contact-Icons address-Icon dInBlock"></div>
تهران - منطقه 7 - خرمشهر (آپادانا) - خ. عربعلی (نوبخت) - ک. شورشی - پ. 7
- ک.پ :
<span itemprop="postal-code">1988744313</span>
<a class="location-map" href="#" data="{'cityName': 'تهران', 'bound': [51.054783544, 35.5567062270001, 51.8901788740001, 35.93970389], 'center':{'ID':'134551-1', 'LAT':35.7296505636096, 'LON':51.4680310847103}, 'marker':{'ID':'134551-1', 'LAT':35.81117, 'LON':51.415537}}"></a>
</li>
<li>
<div class="contact-Icons telefax-Icon dInBlock"></div>
<img class="img-base64"

piroozman
چهارشنبه 05 آذر 1393, 14:02 عصر
سلام. براي اين كار شما بايد از اعلان zero-width نگاه مثبت به عقب استفاده كنيد. اين اعلان به عقب (یا سمت چپ) نگاه می کند و اگر subexpression (مانند پیشوندها و در مورد مشكل شما عبارت 'LAT':) در موقعیت چپ رشته وجود داشته باشد تطبیق انجام می شود. برای مثال(?<=19)99 اعداد 99 را که قبل از آنها عدد 19 باشد را تطبیق می دهد.
براي مشكل شما كد پيشنهادي بنده عبارت زير مي باشد. براي تست مي توانيد از نرم افزار Expresso (http://www.ultrapico.com/expresso.htm)استفاده كنيد.
(?<='LAT':)\d\d\.\d+ اين كد فقط اعداد مربوط به مختصات جغرافيايي رو بر مي گرداند به شرطي كه قبل از آن پيشوند مورد نظر شما تطبيق يافته باشد.
www.radiansoft.ir (http://www.radiansoft.ir)

hosseinrasouli
پنج شنبه 31 اردیبهشت 1394, 23:04 عصر
مهندس من کد html سایت را در یک string ریختم حالا میخوام پاراگراف هایم را برگردانم. آنهایی که ما بین تگ <p> قرار دارند

و در مرحله بعدی بتوانم تگ های اضافی مانند <p><a><li><h2> , ... را از بین ببرم

از چه الگویی استفاده کنم؟

piroozman
جمعه 01 خرداد 1394, 02:22 صبح
مهندس من کد html سایت را در یک string ریختم حالا میخوام پاراگراف هایم را برگردانم. آنهایی که ما بین تگ <p> قرار دارند

و در مرحله بعدی بتوانم تگ های اضافی مانند <p><a><li><h2> , ... را از بین ببرم

از چه الگویی استفاده کنم؟
مي توانيد از الگوي زير استفاده كنيد. در اين الگو، تگهاي <p> و تمامي صفات آن شناسايي شده ولي تطبيق داده نميشود بلكه هر آنچه مابين اين تگ قرار دارد طبيق داده خواهد شد.
الگو:
(?<=<(?i:p.*)>).+(?=</(?i:p)>)
مثال:
<p>string</P>
نتيجه به كارگيري الگوي روي مثال:
string
توضيح كامل الگو:
در الگوی ارائه شده ساختار (?<=<(?!p.*)>) یک zero-width نگاه مثبت به عقب است. این ساختار به دنبال تگ باز <p> با هر شمار صفت می‌گردد ولی آنرا تطبیق نمی‌دهد. به منظور ‌این که بتوانیم ویژگی ignore case را فعال کنیم عبارت p.* را داخل ساختار (?i:subexp) قرار داده‌ایم. جهت بررسی وجود تگ بسته </span> نیز از zero-width نگاه مثبت به جلو به شکل (?=</(?i:p)>) استفاده شده است. در مورد تطیبق دوم تگهای باز و بسته p با حروف بزرگ و کوچک نوشته شده‌اند و ما توانستیم با فعال کردن ignor case به وسیله گروه (?i:subexp) ‌این تگها را نیز شناسایی کنیم. در خصوص ساير تگها مي توانيد فقط نام تگ را عوض كنيد. به فرض اگر به دنبال تگهاي h1 ميگرديد ميتوانيد به جاي حرف p عبارت h1 را در الگو قرار دهيد.
موفق باشيد.

hosseinrasouli
سه شنبه 05 خرداد 1394, 00:36 صبح
مي توانيد از الگوي زير استفاده كنيد. در اين الگو، تگهاي <p> و تمامي صفات آن شناسايي شده ولي تطبيق داده نميشود بلكه هر آنچه مابين اين تگ قرار دارد طبيق داده خواهد شد.
الگو:
(?<=<(?i:p.*)>).+(?=</(?i:p)>)
مثال:
<p>string</P>
نتيجه به كارگيري الگوي روي مثال:
string
توضيح كامل الگو:
در الگوی ارائه شده ساختار (?<=<(?!p.*)>) یک zero-width نگاه مثبت به عقب است. این ساختار به دنبال تگ باز <p> با هر شمار صفت می‌گردد ولی آنرا تطبیق نمی‌دهد. به منظور ‌این که بتوانیم ویژگی ignore case را فعال کنیم عبارت p.* را داخل ساختار (?i:subexp) قرار داده‌ایم. جهت بررسی وجود تگ بسته </span> نیز از zero-width نگاه مثبت به جلو به شکل (?=</(?i:p)>) استفاده شده است. در مورد تطیبق دوم تگهای باز و بسته p با حروف بزرگ و کوچک نوشته شده‌اند و ما توانستیم با فعال کردن ignor case به وسیله گروه (?i:subexp) ‌این تگها را نیز شناسایی کنیم. در خصوص ساير تگها مي توانيد فقط نام تگ را عوض كنيد. به فرض اگر به دنبال تگهاي h1 ميگرديد ميتوانيد به جاي حرف p عبارت h1 را در الگو قرار دهيد.
موفق باشيد.
ممنون مهندس . حالا اگر بخواهم تگ های اضافی مانند <a> </a> , <h2> و ... را از متنم حذف کنم . ?? مثل اینکه هرچی بین <> باشه /b<*>/b

piroozman
چهارشنبه 06 خرداد 1394, 20:10 عصر
ممنون مهندس . حالا اگر بخواهم تگ های اضافی مانند <a> </a> , <h2> و ... را از متنم حذف کنم . ?? مثل اینکه هرچی بین <> باشه /b<*>/b
براي شروع تگ ها از الگوي زير استفاده كنيد:
<\w+\s*[^>]+>\s*
و براي پايان تگها مي توانيد از الگوي زير استفاده كنيد:
</\w+\s*>

در صورتي كه مشكلي داشتيد خوشحال ميشم بتونم كمكتون كنم
موفق باشيد.

hosseinrasouli
جمعه 08 خرداد 1394, 11:22 صبح
حل شد :چشمک:

const string HTML_other_PATTERN = @"\{.*?\}|&.*?;|#.*?;";
static string StripHTML(string inputString)
{
return Regex.Replace(inputString, HTML_TAG_PATTERN, string.Empty);
}