( درخواست آموزش ) آغاز کار با عبارات منظم

my friend

Member
سلام

مثل اینکه عبارات منظم بحث داغ این انجمن هست!
اما مشکلی که هست اینه که یه خورده کار باهاشون سخته ( یا حداقل من و امثال من که تازه میخوان یاد بگیرنش براشون سخته! )

اگه یه جوون مرد پیدا بشه و این چند تا تابعی که برای Regex ها هست رو بزاره و بگه آرگومان هاش برای چی هستن و هر تابع برای چی هست ، یه ملت دعاشون میکنن. ( البته منظورم ملت مجید آنلاین بود! )

در ضمن ، یه آموزش کوچولو هم برای نوشتن پترن هاش بدن عالی میشه:)

راستی ، یه PDF در این زمینه تو همین انجمن دانلود کردم ، اما نثرش واقعا بد بود!

از همینجا از هر کسی که تو این زمینه یاری کنه تشکر میکنم.
 

jalilvand

Member
ereg و eregi وجود عبارت patternو تو string معلوم می کنه. ereg حساسیت به حروف کوچک بزرگ داره ولی eregi نداره. ( کلا اونایی که i آخرشون دارن حساس نیستند):
کد:
int ereg ( string $pattern, string $string [, array &$regs] )
تعداد و برمیگردونه. pattern چیزیه که دنبالش می گرده تو string و اگه زیر رشته های پرانتز دار تو pattern استفاده شن، اونایی که پیدا می کنه تو آرایه reg قرار میده.

از ereg_replace یا eregi_replace واسه جایگزینی استفاده میشه:
کد:
string ereg_replace ( string $pattern, string $replacement, string $string )
ereg_replace رشته ای میده که تو string$ ، عبارت replacement$ و به جای pattern$ می زاره.

preg_match و pregi_match هم تو مایه همون ereg و eregi_match که من زیاد اطلاعاتی ندارم!

به جای pattern هم می تونی از عبارات با قاعده استفاده کنی:

اینا مثالای php.net:

PHP:
<?php
// Returns true if "abc" is found anywhere in $string.
ereg("abc", $string);           

// Returns true if "abc" is found at the beginning of $string.
ereg("^abc", $string);

// Returns true if "abc" is found at the end of $string.
ereg("abc$", $string);

// Returns true if client browser is Netscape 2, 3 or MSIE 3.
eregi("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT); 

// Places three space separated words into $regs[1], $regs[2] and $regs[3].
ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string, $regs);

// Put a <br /> tag at the beginning of $string.
$string = ereg_replace("^", "<br />", $string);
 
// Put a <br /> tag at the end of $string.
$string = ereg_replace("$", "<br />", $string);

// Get rid of any newline characters in $string.
$string = ereg_replace("\n", "", $string);
?>

برای مثال میشه از [[:digit:]] برای چک کردن اینکه عبارت شامل عدد هم هست استفاده کرد. اگه بزاری [[:digit:]]^ یعنی اینکه اولش با عدد شروع شه و $[[:digit:]] یعنی با عدد تموم شه.

عبارات دیگه هم هست که بیشترین استفادرو [[:allnum:]] داره که یعنی [A-Za-z0-9] یا همون حروف و اعداد:

کد:
[:digit:]      Only the digits 0 to 9
[:alnum:]      Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:]       Any alpha character A to Z or a to z.
[:blank:]       Space and TAB characters only.
[:xdigit:]     .
[:punct:]       Punctuation symbols . , " ' ? ! ; :
[:print:]      Any printable character.
[:space:]      Any space characters.
[:graph:]       .
[:upper:]       Any alpha character A to Z.
[:lower:]       Any alpha character a to z.
[:cntrl:]        .

آخری کاراکترای کنترلی و xdigit فکر کنم هگزادسیمال و graph هم نمی دونم چیه
 

my friend

Member
دستت درد نکنه.

الان باید برم بخوابم ، فردا میخونم.

در مورد نوشتن پترن مناسب هم راهنمایی کنید عالی میشه!
 

my friend

Member
کد:
?*[].()^&+-*/\
اگه دستور کار هر کدوم از اینها رو هم بگید عالی میشه + موارد دیگه ای که برای نوشتن پترن ها استفاده میشه.
 
آخرین ویرایش:

jalilvand

Member
سلام

من جزییات و دقیقا نمیدونم. تا جایی که میدونم میگم :
() زیر رشته معلوم میکنه و [] یعنی یه الگو و {} تعداد. مثلا
PHP:
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)
یعنی متن از 3 زیرمجموعه تشکیل شده باشه که بینشون - باشه ( - مستقیم تو pattern اومده یعنی خودش)، قسمت اول از 4 کاراکتر که پترن [0-9] هستند، یعنی همون اعداد، قسمت دوم و سوم هم همون اعداد ولی یا یکی یا دوتا.

^ در اول یعنی اینکه پترن اول رشته باشه. مثل def^ تو abcdef اگه از ereg استفاده کنی 0 میده.
$ مثل ^ ولی یعنی آخر پترن باشه یعنی $def تو abcdef پیدا می شه.

اگه عبارت بین دو@ بیاد توسط کاراکتر بعدش می شه تغییر پترن و تعریف کرد. مثلا http@i@ به حروف کوچک بزرگ حساس نیست.
....

فقط خودم تو ؟ و : مشکل دارم!
 

my friend

Member
فقط خودم تو ؟ و : مشکل دارم!
? رو متوجه شدم چکار میکنه.
مربوط میشه به شرطی بودن ، که ممکنه باشه و ممکنه نباشه:
PHP:
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})?", $date, $regs)
این میگه ممکنه بعد از خط تیره (-) آخر هیچ چیزی وجود نداشته باشه یا اون شرطی که داخل پرانتز هست وجود داشته باشه:
PHP:
4568-5-56
4568-65-
 

my friend

Member
با مثال خیلی راحت میشه متوجه شد:
PHP:
ereg ("([0-9]{4})-([0-9]{1,2})-(5{1,2})?", $date, $regs)
با این موارد مطابقت میکنه:
کد:
4568-5-5
4568-5-55
4568-5-
یعنی ممکنه 5 وجود داشته باشه ، ممکنه وجود نداشته باشه.
اگه وجود داره ، یا یک پنج هست ( 5 ) یا دو تا ( 55 )
 
آخرین ویرایش:

bahy_my

Active Member
سلام
نفر دوم کشور شدم و نمی تونم به صورت حرفه ای با عبارات منظم کار کنم.
هر چی بگین تو این تا÷یک من استقبال می کنم. فعلاً خداحافظ
 

alireza82

Well-Known Member
سلام
نفر دوم کشور شدم و نمی تونم به صورت حرفه ای با عبارات منظم کار کنم.
هر چی بگین تو این تا÷یک من استقبال می کنم. فعلاً خداحافظ

سلام
نمیخوام آموزش بدم ولی بهت پیشنهاد میکنم کتاب نظریه زبان ها و ماشین رو بخونی. این یه درس 3 واحدی برای رشته کامپیوتر هست. یه فصل داره در مورد زبان های منظم.
شاید خوندن این فصل حداقل مشکلاتی رو برای فهم این عبارات حل کنه براتون. البته اگر کل این کتاب رو بخونید هم ضرر نکردید. در کل این یه درس تئوریک هست که معمولا دانشجو ها با هاش حال نمیکنن مخصوصا این که یه حالت هوش و ریاضی هم داره. ولی من عاشق این درس بودم.
حالا این میل خودتون هست ولی اگر این کتاب حداقل اون فصل رو بخونید میتونه کمک خوبی باشه. کتاب های تست هم حتی براش هست چون تو ازمون کارشناسی ارشد ضریب 4 داره. من خودم وقتی عبارات منظم رو میخوندم چون قبلا این درس رو پاس کرده بودم واقعا موقع کار راحت بودم.
البته یاد گیری اون بدون استاد کمی مشکل هست. موفق باشید
 

bahy_my

Active Member
ممنون, اون این کتاب الکترونیک هستش یا نه ؟
چطوری تهیه ـش کنم ؟
 

alireza82

Well-Known Member
من الکترونیکش رو ندیدم. البته وبلاگ هایی در این مورد هست ولی اونا بیشتر به قسمت ماشین ها پرداختند و گرامر ها. عبارات منظم یه جورایی پیش زمینه اونهاست.
تو بازار
یه کتاب سیاه رنگ هست. به اسم نظریه زبان ها و ماشین مترجم دکتر صراف زاده. از اون جایی که از ایم اش هم پیداست و یه کتاب نظریه پردازی هست یه جورایی حتما قبل از خرید یکم از اون رو ورق بزن بعد بخر. فیمتش هم دور و ور 3500 هست
موفق باشید
 

جدیدترین ارسال ها

بالا