با سلام خدمت شما دوستان عزیز ، امیدوارم که شاد باشید و سلامت و بااموزشهای امروز ما همراه باشید. درمورد Regular Expression در php میخوام کمی توضیح بدم عبارات عادی {regular expression} چیزی جز سری یا الگویی از خود کاراکتر ها نیستند. آن ها پایه ی قابلیت و توانایی مطابقت با الگو را فراهم می سازند.
با استفاده از این عبارات عادی شما می توانید در داخل یک رشته یا string به دنبال رشته ی دیگری بگردید، یا یک رشته را جایگزین رشته ی دیگر کنید و همچنین یک string را به تکه ها {chunk} های متعدد تقسیم کنید.
PHP عملکردهایی {function} را مختص به دو دسته یا مجموعه تابع عبارات عادی ارائه می دهد، که هر کدام با یک نوع معین از عبارات عادی مطابقت دارد. می توانید از هرکدام که باب میلتان استفاده کنید.
POSIX regular expressions
PERL style regular expression
عبارات عادی POSIX
ساختار این نوع عبارات {regular expression} به ساختار حسابی {arithmetic} معمول بی شباهت نیست، عناصر {عملگر یا { operator گوناگونی باید با هم ترکیب شوند تا عبارات پیچیده تر ساخته شود.
ساده ترین نوع عبارت با قاعده {regular expression} آن است که یک تک کاراکتر، مانند g، در داخل یک رشته {string} مثل g، haggle، bag قرار بگیرد.
اجازه دهید که به تشریح تعدادی از این مفاهیم که در POSIX به کار می رود بپردازیم. پس از معرفی برخی از این مفاهیم، درباره توابع مرتبط با این عبارات بحث خواهیم کرد.
Bracket
این علامت [] هنگامی که در متن و context عبارات عادی {regular expression} به کار می رود، معنای خاصی دارد. از آن ها برای پیدا کردن طیفی از کاراکتر ها استفاده می شود.
Expression{عبارت}
Description {توصیف کاربرد}
[۰-۹]
با تمام ارقام دهدهی{decimal digits} از ۰ تا ۹ مطابقت دارد و مچ می شود.
[a-z]
با تمام حروف{character} کوچک {lowercase} ازaتاz مطابقت دارد.
[A-Z]
با تمام حروف بزرگ از A تا Z هم خوانی دارد وبا آن مچ می شود.
[a-Z]
با تمام حروف{character} کوچک {lowercase} ازa تا حروف بزرگ Z مچ و هماهنگ است.
طیف های بالا ذکر شده عمومی هستند، همچنین می توانید از طیف ]۳-۰[ برای مطابقت با هر عدد دهدهی {decimal digits} از ۰ تا ۳ استفاده کنید، یا از طیف [b-v] برای حروف کوچک از b تا v.
Quantifier {کمیت سنج}
برای نشان دادن تعداد دفعات تکرار یا موقعیت سری کاراکتر {character sequence} های داخل [] و تک کاراکتر ها باید از کاراکتر خاص استفاده کرد. هر یک از این کاراکتر های مخصوص معنای ضمنی {connotation} منحصر به فردی دارد. این علامت ها +، *، ?، {int. range} و $ به دنبال رشته کاراکتر character sequence}} می آیند.
Expression {عبارت}
Description {توصیف کاربرد}
p+
با هر رشته یا string ای که حداقل یک p دارد مطابقت دارد.
p*
با هر رشته یا string ای که حداقل { zero}0 یا
P بیشتری داشته باشد مَچ می شود.
p?
با هر رشته یا string ای که حداقل { zero}0 یا
P بیشتری داشته باشد مَچ می شود. این راه فقط شیوه ی دیگر برای استفاده از p* است.
p{N}
با هر رشته یا string ای که توالی از N p’s دارد مطابق است.
p{2، ۳}
با هر رشته یا string ای که توالی از دو یا سه p دارد هم خوانی دارد.
p{2، }
با هر رشته یا string ای که توالی از حداقل دو p دارد تطبیق دارد.
p$
با هر رشته ای که p در انتها خود دارد مطابق است.
^p
با هر رشته ای که p در ابتدای خود دارد هم خوان است.
مثال زیر مفاهیم کاراکتر هایی که با هم تطبیق دارند را برای شما روشن می سازد.
Expression {عبارت}
Description {توصیف کاربرد}
[^a-zA-Z]
با رشته هایی که هیچ یک از کاراکتر های a تا z و از A تاZ را نداشته باشد مطابقت دارد.
p. p
با رشته هایی که دربردارنده ی p و به دنبال آن هر کاراکتر دیگری بیاید، که باز به دنبال آن کاراکتر دوباره p بیاید مطابقت دارد.
^. {۲}$
با هر رشته ای که دقیقاً دو کاراکتر دارد مَچ می شود.
(. *)
با هر رشته ای که در علامت و قرار داده شده باشد هم خوانی دارد.
p(hp)*
با هر رشته ای که یک p و به دنبال آن ۰ یا مثال بیشتری از توالی hp داشته باشد.
طیف کاراکتری از پیش تعریف شده {predefined character range}
برای راحتی هر چه بیشتر شما در برنامه نویسی طیف کاراکتری از پیش تعریف شده متعددی، که با نام character class هم شناخته می شوند، موجود هست. کلاس کاراکترها یک طیف کامل از کاراکترها مثل الفبا یا دسته عدد صحیح {integer set} را تعریف می کند.
Expression{عبارت}
Description {توصیف کاربرد}
[[:alpha:]]
با هر رشته ای که دربردارنده ی کاراکترهای الفبا از aA تا zZاست مطابقت دارد.
[[:digit:]]
با هر رشته ای که دربردارنده ی numerical digit {عددی} از ۰ تا ۹
است تطبیق دارد.
[[:alnum:]]
با هر رشته ای که دربردارنده ی کاراکترهای حرفی-عددی {alpha-numeric} aA تا zZ و ۰ تا ۹ هست ، مطابقت دارد.
[[:space:]]
هر رشته ای که دارای جای خالی {space} هست.
PHP’s Regexp POSIX function
PHP در حال حاضر هفت عملکرد {function} برای جست و جو در string به کمک عبارات عادی POSIX-style فراهم می کند.
Expression{عبارت}
Description {توصیف کاربرد}
ereg()
عملکرد، تابع {function} ereg() یک رشته ی مشخص شده توسط رشته برای رشته مشخص شده توسط الگو را جستو و جو می کند، که اگر الگوی مطابق پیدا شود true باز می گردد و اگر غلط باشد نتیجه ی false می دهد.
ereg_replace()
ereg_replace() function به دنبال رشته ای که الگو تعیین می کند می گردد، در صورت پیدا کردن جایگزین آن را جایگزین می کند.
eregi()
eregi() در سرتاسر یک رشته مشخص شده توسط الگو به دنبال رشته مشخص شده توسط رشته ی دیگر می گردد.
eregi_replace()
eregi_replace() function دقیقاً مانند ereg_replace() function عمل می کند، به جز این که جستو و جوی به دنبال الگو به کوچک و بزرگی حروف حساس نیست.
split()
split() function یک رشته را به عناصر مختلف تقسیم می کند؛البته مرز ومحدوده هر اِلمان وابسته به وقوع و وجود الگو در رشته هست.
spliti()
spliti() function دقیقاً به همان شیوه ی برادرش split() عمل می کند، به جز این که به کوچک و بزرگی حروف حساس نیست {case sensitive}.
sql_regcase()
از sql_regcase() می توان به عنوان یک عملکرد خدماتی{utility function} یاد کرد، که کاراکتر داخل input parameter string {ورودی رشته پارامتر} را به عبارتی که دو کاراکتر دارد و داخل [] قرار می گیرد تبدیل می کند
عبارات عادی سبک PERL
عبارات عادی سبک PERL شبیه همپای POSIX خود هستند. از POSIX syntax تقریباً می توان به جای Perl-style regular expression functions {توابع عبارات عادی سبک PERL} استفاده کرد. در واقع، شما می توانید تمام کمیت سنج {quantifier} های معرفی شده در بخش POSIX پیش را به کار ببرید.
هم اکنون توضیح متخصری درباره ی مفاهیم معمول در Perl regular expression می دهیم. سپس، شما را با عملکردهای {function} مرتبط با آن آشنا می سازیم.
Metacharacters {متا کاراکترها}
متا کاراکتر اساساً یک کاراکتر الفبایی {alphabetical} است که به دنبال علامت ‘ /’ می آید و به ترکیب معنای خاصی می دهد.
برای مثال، می توانید با استفاده از متا کاراکتر ‘\d’ ، مبالغ زیاد پول را جستو و جو کنید : /([\d]+)000/.
اینجا \d هر رشته ای که از کاراکتر های عددی تشکیل شده است را جست و جو بررسی می کند.
زیر فهرستی از متا کاراکتر هایی که در PERL Style Regular Expressions به کار می رود را مشاهده می کنید.
character
Description {توصیف کاربرد}
.
یک تک کاراکتر{single character}
\s
کاراکتر جای خالی {whitespace}، (space، tab، newline)
\S
کاراکتر بدون جای خالی{non-whitespace}
\d
یک رقم{digit}(9-0)
\D
یک non-digit {غیررقم}
\w
یک کاراکتر کلمه {word character}، (a-z، A-Z، ۰-۹، _)
\W
کاراکتر غیر کلمه ای } non-word character}
[aeiou]
در مجموعه ی داده شده فقط با یک کاراکتر match می شود.
[^aeiou]
با یک تک کاراکتر خارج از مجموعه ی داده شده مَچ می شود.
(foo|bar|baz)
به همه ی جایگزین های مشخص شده می خورد.
Modifiers {اصلاح کنندها}
modifier های متعددی وجود دارند که کار با regexps بسیار آسان می کنند، مثل حساسیت به کوچک و بزرگی {case sensitivity}، توانایی جستو و جو در چند خط همزمان و غیره.
character
Description {توصیف کاربرد}
i
فرآیند match را به کوچک و بزرگی حروف بی تفاوت {case insensitive} کنید.
m
دستور می دهد که اگر رشته{string} ، newline یا carriage character return داشت، عملگرهای {operator} ^ و $اکنون با مرز سر خط{newline boundary} به جای مرز رشته ای{string boundary} مقایسه و match شود.
o
تنها عبارت{expression} را ارزیابی می کند.
s
اجازه ی استفاده از. برای تطبیق دادن و وصل کردن کاراکتر خط جدید{newline} می دهد.
x
به شما اجازه می دهد برای ایجاد روشنی در عبارت از جای خالی {whitespace}استفاده کنید.
g
به صورت سراسری تمام match ها را پیدا می کند.
cg
به فرآیند جستو و جو اجازه می دهد که کار خود را حتی پس از این که تطبیق سراسری شکست خورده ادامه دهد.
تابع های {function} سازگار Perl PHP’S Regexp
PHP برای جستو و جوی رشته ها {string} به کمک عبارت های عادی سازگار با Perl، عملکرد های زیر را ارائه می دهد.
Function {عملکرد}
Description {توصیف عملکرد}
preg_match()
preg_match() در رشته به دنبال الگو {pattern} می گردد، که در صورت پیدا کردن الگو نتیجه ی true ودر غیر این صورت false به دست می دهد.
preg_match_all()
preg_match_all() function با تمام الگوهای موجود در رشته مچ می شود.
preg_replace()
تابع یا عملکرد preg_replace() دقیقاً مانند ereg_replace() عمل می کند، به استثنا ی این که عبارات عادی {regular expression} را می توان در الگو وreplacement input }parameter پارامترهای جایگزین ورودی} به کار برد.
preg_split()
preg_split() کاملاً مثل split() عمل می کند، به استثنا ی این که عبارات عادی {regular expression} به عنوان پارامترهای داده برای الگو به کار می روند.
preg_grep()
preg_grep() تمام عنصرهای input_array را بررسی می کند، که تمام اِلِمان های ای که با patternregexp مطابقت دارند را به عنوان نتیجه بازمی گرداند.
preg_ quote()
کاراکترهای عبارات عادی را با علامت ” ” فرامی خواند.