Fadak - Programming - Regular Expression (regex)
: 2018-07-21Visitor Count : 186

Regular Expression (regex)


  1. Bracket
  2. Quantifier {کمیت سنج}
  3. طیف کاراکتری از پیش تعریف شده {predefined character range}
  4. PHP's Regexp POSIX function
  5. عبارات عادی سبک PERL
  6. Metacharacters {متا کاراکترها}
  7. Modifiers {اصلاح کنندها}
  8. تابع‎های {function} سازگار Perl PHP'S Regexp

RegExr: Learn, Build, & Test RegEx

Selecting tags

<(?!a|br)[^>]*>
<(div|/div|br|p|/p)[^>]{0,}>

 

 

a|b Matches a or b
gr(a|e)y Matches gray or grey
. Matches any single character
[abc] Matches a single character a, b or c
[^abc] Matches any single character except a, b or c
[a-z] Matches a single charactor in the range a to z
[a-zA-Z] Matches a single charactor in the range a to z or A to Z
^ Matches the start of the filename
$ Matches the end of the filename
( ) Defines a marked subexpression
\n Matches what the nth marked subexpression matched, where n is a digit from 1 to 9
\b Match word boundaries
* Matches the preceding element zero or more times
? Matches the preceding element zero or one times
+ Matches the preceding element one or more times
*? Lazily matches the preceding element zero or more times
+? Lazily matches the preceding element one or more times
{x} Matches the preceding element x times
{x,} Matches the preceding element x or more times
{x,y} Matches the preceding element between x and y times
\ Escape special character

 

 

Regex quick reference
[abc]     A single character: a, b or c
[^abc]     Any single character but a, b, or c
[a-z]     Any single character in the range a-z
[a-zA-Z]     Any single character in the range a-z or A-Z
^     Start of line
$     End of line
\A     Start of string
\z     End of string
.     Any single character
\s     Any whitespace character
\S     Any non-whitespace character
\d     Any digit
\D     Any non-digit
\w     Any word character (letter, number, underscore)
\W     Any non-word character
\b     Any word boundary character
(...)     Capture everything enclosed
(a|b)     a or b
a?     Zero or one of a
a*     Zero or more of a
a+     One or more of a
a{3}     Exactly 3 of a
a{3,}     3 or more of a
a{3,6}     Between 3 and 6 of a

options: i case insensitive m make dot match newlines x ignore whitespace in regex o perform #{...} substitutions only once

 

Example:
Ccheck email:
preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)


only numbers, letters and dot:
echo preg_match("/^[a-z0-9.]+$/i", $accountname);
if(preg_match('/[^0-9a-z\s-]/i',$string))
if(preg_match('/[^0-9A-Za-z\(\)\s-]/i',$string))

 

برای اینکه بین دو عبارت را انتخاب کنیم از عبارت زیر استفاده می‌کنیم

Start*.+"End

    . در الگو به معنای این است که هر کاراکتری می‌تواند ظاهر شود(فقط یک کاراکتر).
    * در الگو به این معناست که عبارت قبل از آن می‌تواند 0 بار یا بیشتر تکرار شود.
    + در الگو به این معناست که عبارت قبل از آن می‌تواند 1 بار یا بیشتر تکرار شود.
    ? در الگو به معنای این است که عبارت قبل از آن می‌تواند ظاهر نشود یا 1 بار ظاهر شود.
    {num} عبارت قبل از این به تعداد num باید تکرار شود نه بیشتر و نه کمتر)num یک عدد صحیح است).
    {m,n} عبارت قبل از این به تعداد حداقل m و حداکثر بار باید تکرار شود نه بیشتر و نه کمتر)n , m هردو اعداد صحیح هستند).
    () هر عبارتی بین پرانتز قرار گیرد به عنوان یک واحد حساب می‌شود.
    [] یک کلاس کاراکتر را مشخص می‌کند به این معنا که فقط یکی از کاراکتر‎های تعریف شده داخل آن می‌توانند ظاهر شوند.
    - در الگو برای مشخص کردن محدوده به کار می‌رود مثلا 9-0.
    ^ دو حالت می‌تواند داشته باشد 1.در ابتدای الگو به این معناست که عبارت مورد جستجو باید با عبارتی (کلمه،کاراکتر یا کلاس کاراکتر) که بعد از ^ می‌آید شروع شود.در داخل [] به این معناست که کاراکتر بعد از آن نباید ظاهر شود.
    $ در پایان الگو به این معناست که عبارت مورد جستجو باید با عبارتی(کلمه،کاراکتر یا کلاس کاراکتر) که قبل از $ می‌آید شروع شود.
    | یک عملگر است و به معنای یا می‌باشد.


. در الگو به معنای این است که هر کاراکتری می‌تواند ظاهر شود(فقط یک کاراکتر).
* در الگو به این معناست که عبارت قبل از آن می‌تواند 0 بار یا بیشتر تکرار شود.
+ در الگو به این معناست که عبارت قبل از آن می‌تواند 1 بار یا بیشتر تکرار شود.
? در الگو به معنای این است که عبارت قبل از آن می‌تواند ظاهر نشود یا 1 بار ظاهر شود.
{num} عبارت قبل از این به تعداد num باید تکرار شود نه بیشتر و نه کمتر)num یک عدد صحیح است).
{m,n} عبارت قبل از این به تعداد حداقل m و حداکثر بار باید تکرار شود نه بیشتر و نه کمتر)n , m هردو اعداد صحیح هستند).
() هر عبارتی بین پرانتز قرار گیرد به عنوان یک واحد حساب می‌شود.
[] یک کلاس کاراکتر را مشخص می‌کند به این معنا که فقط یکی از کاراکتر‎های تعریف شده داخل آن می‌توانند ظاهر شوند.
- در الگو برای مشخص کردن محدوده به کار می‌رود مثلا 9-0.
^ دو حالت می‌تواند داشته باشد 1.در ابتدای الگو به این معناست که عبارت مورد جستجو باید با عبارتی (کلمه،کاراکتر یا کلاس کاراکتر) که بعد از ^ می‌آید شروع شود.در داخل [] به این معناست که کاراکتر بعد از آن نباید ظاهر شود.

$ در پایان الگو به این معناست که عبارت مورد جستجو باید با عبارتی(کلمه،کاراکتر یا کلاس کاراکتر) که قبل از $ می‌آید شروع شود.
| یک عملگر است و به معنای یا می‌باشد.

 نتیجه
    
regex
پیدا کردن کلمه foo     foo
شروع یک رشته با کلمه foo     ^foo
پایان یافتن یک رشته با کلمه foo     foo$
وقتی که خود کلمه foo در یک رشته باشد     ^foo$
حرف c یا b یا a     [abc]
تمام حروف از a تا z     [a-z]
کارکترهایی که بزرگ نیستند     [^A-Z]
پیدا کردن gif یا jpg     (gif|jpg)
یک یا جند کلمه با حروف کوچک     [a-z]+
اعداد، نقطه و یا علامت منفی     [۰-۹\.\-]
هر کلمه که حداقل یک حرف، عدد یا آندرلاین داشته باشه     ^[a-zA-Z0-9_]{1,}$
wy, wz, xy, یا xz     ([wx])([yz])
هر کاراکتری به غیر از حروف و اعداد     [^A-Za-z0-9]
سه حرف و چهار عدد     ([A-Z]{3}|[0-9]{4})

Bracket

این علامت [] هنگامی که در متن و context عبارات عادی {regular expression} به کار می‌رود، معنای خاصی دارد. از آن‎ها برای پیدا کردن طیفی از کاراکتر‎ها استفاده می‌شود.

 

Expression{عبارت}
Description {توصیف کاربرد}
[0-9]
با تمام ارقام دهدهی{decimal digits} از 0 تا 9 مطابقت دارد و مچ می‌شود.
[a-z]
با تمام حروف{character} کوچک {lowercase} ازaتاz مطابقت دارد.
[A-Z]
با تمام حروف بزرگ از A تا Z هم خوانی دارد وبا آن مچ می‌شود.
[a-Z]
با تمام حروف{character} کوچک {lowercase} ازa تا حروف بزرگ Z مچ و هماهنگ است.

طیف‎های بالا ذکر شده عمومی هستند، همچنین می‌توانید از طیف ]3-0[ برای مطابقت با هر عدد دهدهی {decimal digits} از 0 تا 3 استفاده کنید، یا از طیف [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، 3}
با هر رشته یا string‎ای که توالی از دو یا سه p دارد هم خوانی دارد.
p{2، }
با هر رشته یا string‎ای که توالی از حداقل دو p دارد تطبیق دارد.
p$
با هر رشته‎ای که p در انتها خود دارد مطابق است.
^p
با هر رشته‎ای که p در ابتدای خود دارد هم خوان است.

مثال زیر مفاهیم کاراکتر‎هایی که با هم تطبیق دارند را برای شما روشن می‌سازد.

Expression {عبارت}
Description {توصیف کاربرد}
[^a-zA-Z]
با رشته‎هایی که هیچ یک از کاراکتر‎های a تا z و از A تاZ را نداشته باشد مطابقت دارد.
p. p
با رشته‎هایی که دربردارنده‎ی p و به دنبال آن هر کاراکتر دیگری بیاید، که باز به دنبال آن کاراکتر دوباره p بیاید مطابقت دارد.
^. {2}$
با هر رشته‎ای که دقیقاً دو کاراکتر دارد مَچ می‌شود.
(. *)
با هر رشته‎ای که در علامت و قرار داده شده باشد هم خوانی دارد.
p(hp)*
با هر رشته‎ای که یک p و به دنبال آن 0 یا مثال بیشتری از توالی hp داشته باشد.

طیف کاراکتری از پیش تعریف شده {predefined character range}

برای راحتی هر چه بیشتر شما در برنامه نویسی طیف کاراکتری از پیش تعریف شده متعددی، که با نام character class هم شناخته می‌شوند، موجود هست. کلاس کاراکترها یک طیف کامل از کاراکترها مثل الفبا یا دسته عدد صحیح {integer set} را تعریف می‌کند.

Expression{عبارت}
Description {توصیف کاربرد}
[[:alpha:]]
با هر رشته‎ای که دربردارنده‎ی کاراکترهای الفبا از aA تا zZاست مطابقت دارد.
[[:digit:]]
با هر رشته‎ای که دربردارنده‎ی numerical digit {عددی} از 0 تا 9 است تطبیق دارد.
[[:alnum:]]
با هر رشته‎ای که دربردارنده‎ی کاراکترهای حرفی-عددی {alpha-numeric} aA تا zZ و 0 تا 9 هست، مطابقت دارد.
[[: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، 0-9، _)
\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()
کاراکترهای عبارات عادی را با علامت " " فرامی خواند.

 

 

 

 

 آموزش Regular Expression در php

 

  Regular Expression آموزش عبارت با قاعده

Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

RegExr: Learn, Build, & Test RegEx

Regex Tester and Debugger Online - Javascript, PCRE, PHP

Regular Expressions Reference: Quantifiers

Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

آموزش کامل Regular Expressions عبارات باقاعده

RegExr: Learn, Build, & Test RegEx

phone validator - Regex Pal

 Regex Cheat Sheet

فدک - برنامه نویسی - عبارات با قاعده - Regular Expression

https://regex101.com/

 


   

2000-2016 CMS Fadak. ||| Version : 4.2-b1 ||| This page was produced in : 0.055 Seconds