regex چیست؟

Regex (ریجکس یا عبارات با قاعده) چیست؟

عبارات منظم (regex) الگوهای جستجو را تعریف می کنند که توابع خاصی برای جستجوی رشته ها استفاده می کنند. عبارات منظم یا ریجکس روشی انعطاف‌پذیر برای مطابقت با تمام کاراکترها یا بخش‌های متن در یک رشته ارائه می‌کنند. regex ها به ویژه برای تعریف فیلترها مفید هستند. و شامل یک سری کاراکتر است که الگوی متنی را برای تطبیق تعریف می‌کند تا فیلتر تخصصی‌تر یا عمومی‌تر شود.

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

ما در این صفحه به صورت کامل آموزش regex را برای شما دوستان A تا Z آماده کرده ایم و امیدواریم که مفید واقع شود.

زمان مطالعه: 3 دقیقه
بازدید: 3286
پرسش و پاسخ: 0

ریجکس چیست (regular expression)؟

اصطلاح Regex مخفف عبارت Regular Expression است. regex یا regexp یا عبارت منظم دنباله ای از کاراکترهای مختلف است که الگوی جستجوی خاص را توصیف می کند. همچنین به عنوان یک عبارت منطقی یا عبارت با قاعده هم نامیده می شود.

عمدتاً برای جستجو و دستکاری رشته های متنی استفاده می شود. به عبارت ساده، شما می توانید به راحتی الگو را جستجو کنید و با کمک عبارت منظم، الگوی مطابق را جایگزین کنید.

این مفهوم یا ابزار تقریباً در تمام زبان های برنامه نویسی یا برنامه نویسی مانند PHP، C، C++، Java، Perl، JavaScript، Python، Ruby و بسیاری دیگر استفاده می شود. همچنین در پردازشگرهای کلمه مانند word که به کاربران برای جستجوی متن در یک سند کمک می کند و همچنین در IDE های مختلف استفاده می شود.

الگوی تعریف شده توسط ریجکس روی رشته داده شده یا متنی از چپ به راست اعمال می شود.

کاراکترهای Regular Expression

انواع مختلفی از کاراکترهای یک ریجکس (regex) وجود دارد که به صورت ذیل قابل فهم برای ما هستند:

  1. Metacharacters regex
Metacharacters
Metacharacters شرح مثال
^ این کاراکتر برای مطابقت دادن یک عبارت در سمت راست آن در ابتدای رشته استفاده می شود. ^a یک عبارت مطابقت با رشته ای است که با 'a' شروع می شود مانند "aab"، "a9c"، "apr"، "aaaaab"، و غیره.
& علامت $ برای مطابقت دادن یک عبارت در سمت چپ آن در انتهای یک رشته استفاده می شود. r& تطبیق عبارت با رشته ای است که با r ختم می شود مانند "aaabr"، "ar"، "r"، "aannn9r" و غیره.
. این کاراکتر برای مطابقت با هر کاراکتر منفرد در یک رشته به جز پایان دهنده خط، یعنی /n استفاده می شود. b.x عبارتی است که با رشته هایی مانند "bax"، "b9x"، "bar" مطابقت دارد.
| برای مطابقت با یک شخصیت خاص یا گروهی از شخصیت ها در هر دو طرف استفاده می شود. اگر کاراکتر سمت چپ مطابقت داشته باشد، شخصیت سمت راست نادیده گرفته می شود. A|b عبارتی است که رشته های مختلفی می دهد، اما هر رشته حاوی a یا b است.
\ برای فرار از یک کاراکتر خاص بعد از این علامت در یک رشته استفاده می شود.  
A برای مطابقت با کاراکتر "A" در رشته استفاده می شود. این عبارت با رشته هایی که حداقل یک بار A در آنها وجود دارد مطابقت دارد. چنین رشته هایی عبارتند از "Amcx"، "mnAr"، "mnopAx4".
Ab برای تطبیق زیر رشته 'ab' در رشته استفاده می شود. این عبارت با رشته‌هایی مطابقت دارد که «Ab» حداقل یک بار در آنها وجود دارد. چنین رشته هایی عبارتند از "Abcx"، "mnAb"، "mnopAbx4".
  1. Quantifiers regex
    quantifiers ها در عبارت منظم (ریجکس) برای تعیین تعداد وقوع یک کاراکتر استفاده می شوند.
quantifiers
Characters شرح مثال
+ این کاراکتر یک یا چند بار یک عبارت را در سمت چپ خود مشخص می کند. s+ عبارتی است که "s"، "ss"، "sss" و غیره را می دهد.
? این کاراکتر یک عبارت را در سمت چپ خود برای 0 (صفر) یا 1 (یک) بار مشخص می کند. aS? عبارتی است که یا "a" یا "as" را می دهد، اما "ass" را نمی دهد.
* این کاراکتر یک عبارت را در سمت چپ خود برای 0 یا بیشتر مشخص می کند Br* عبارتی است که «B»، «Br»، «Brr»، «Brrrr» و غیره را می دهد.
{x} فقط x بار یک عبارت را در سمت چپ خود مشخص می کند.

Mab{5} عبارتی است که رشته زیر را می دهد که حاوی 5 b است:

"Mabbbbb"
{x, } یک عبارت را در سمت چپ خود برای x یا چند بار مشخص می کند. Xb{3, } عبارتی است که رشته های مختلف حاوی حداقل 3 b را می دهد. چنین رشته هایی عبارتند از "Xbbb"، "Xbbbb"، و غیره.
{x,y} یک عبارت را در سمت چپ خود مشخص می کند، حداقل x بار اما کمتر از y بار.

Pr{3,6}a عبارتی است که دو رشته را ارائه می‌کند.

هر دو رشته به شرح زیر است:

"Prrrr" و "Prrrrrr"
  1. گروه ها و محدوده ها در regex
    گروه ها و محدوده ها در عبارت منظم مجموعه کاراکترهای محصور شده در پرانتز را تعریف می کنند.
گروه ها و محدوده ها
Characters شرح مثال
(  ) برای مطابقت با هر چیزی که در براکت ساده است استفاده می شود.

A(xy) عبارتی است که با رشته زیر مطابقت دارد:

"Axy"
{  } برای مطابقت با تعداد خاصی از رخدادهای تعریف شده در براکت فرفری برای رشته سمت چپ آن استفاده می شود.

xz{4,6} عبارتی است که با رشته زیر مطابقت دارد:

"xzzzzzz"
[  ] برای مطابقت با هر کاراکتری از طیفی از کاراکترهای تعریف شده در براکت مربع استفاده می شود.

xz[atp]r عبارتی است که با رشته های زیر مطابقت دارد:

"xzar"، "xztr" و "xzpr"
[pqr] p، q یا r را به صورت جداگانه مطابقت می دهد.

رشته های زیر با این عبارت مطابقت دارند:

“p”، “q” و “r”
[pqr][xy] با p، q یا r مطابقت دارد و به دنبال آن x یا y می آید.

رشته های زیر با این عبارت مطابقت دارند:

“px”، “qx”، “rx”، “py”، “qy”، “ry”
(?: …) برای تطبیق یک گروه non-capturing استفاده می شود.

A(?:nt|pple) عبارتی است که با رشته زیر مطابقت دارد:

“Apple”
[^…..] با کاراکتری مطابقت دارد که در براکت تعریف نشده است.

Ab[^pqr] عبارتی است که فقط با رشته زیر مطابقت دارد:

“Ab”
[a-z] حروف یک مورد کوچک را از a تا z مطابقت می دهد.

این عبارت با رشته هایی مانند زیر مطابقت دارد:

“a”، “python”، “good”
[A-Z] حروف بزرگ را از A تا Z مطابقت می دهد.

این عبارت با رشته هایی مانند زیر مطابقت دارد:

“EXCELLENT”، “NATURE”
^[a-zA-Z] از آن برای مطابقت با رشته استفاده می شود که یا با حروف کوچک یا بزرگ شروع می شود.

این عبارت با رشته هایی مانند زیر مطابقت دارد:

“A854xb”، “pv4fv”، “cdux”
[0-9] با یک رقم از 0 تا 9 مطابقت دارد.

این عبارت با رشته هایی مانند زیر مطابقت دارد:

“9845”، “54455”
[aeiou] این براکت فقط با حروف صدادار کوچک مطابقت دارد. -
[AEIOU] این براکت فقط با حروف صدادار بزرگ مطابقت دارد. -
Ab[^4-9] با ارقام یا کاراکترهایی مطابقت دارد که در براکت مربع تعریف نشده اند. این عبارت با رشته هایی که شامل 5، 6، 7 و 8 نیستند مطابقت دارد.
  1. Escape Characters or Character Classes regex
Escape Characters or Character Classes
Characters شرح
\s برای مطابقت با یک کاراکتر فاصله خالی استفاده می شود.
\S برای مطابقت با یک نویسه که فضای خالی ندارد استفاده می شود.
\0 برای مطابقت با یک کاراکتر NULL استفاده می شود.
\a برای مطابقت با زنگ یا زنگ هشدار استفاده می شود.
\d برای تطبیق یک رقم اعشاری به معنی 0 تا 9 استفاده می شود.
\D برای مطابقت با هر رقم غیر اعشاری استفاده می شود.
\n به کاربر کمک می‌کند تا یک خط جدید را مطابقت دهد.
\w

برای مطابقت با حروف عددی استفاده می شود

[0-9a-zA-Z]
\W برای مطابقت با یک کاراکتر غیرکلمه ای استفاده می شود
\b برای مطابقت با مرز یک کلمه استفاده می شود.

عبارت با قاعده (ریجکس - regex) در زبان های مختلف

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

  1. استفاده از Regular Expression یا ریجکس در جاوا (جاوا Regex)
    در زبان جاوا، Regex یا Regular Expression یک رابط برنامه نویسی کاربردی است که برای دستکاری، جستجو و ویرایش یک رشته استفاده می شود. می توانید با وارد کردن بسته API java.util.regex در کد خود از Regular Expression در جاوا استفاده کنید.
    سه کلاس زیر در بسته java.util.regex وجود دارد:
  • regex.Pattern: این کلاس به تعریف الگوها کمک می کند
  • regex.Matcher: این کلاس به انجام عملیات تطبیق روی یک رشته ورودی با استفاده از الگوها کمک می کند.
  • PatternSyntaxException: این کلاس با نشان دادن خطای نحوی در یک الگوی عبارت منظم به کاربران کمک می کند.

کلاس util.regex.Pattern - این کلاس (util.regex.Pattern) یک نسخه کامپایل شده Regex است و می توان آن را با متد compile() فراخوانی کرد. متد compile() regex را به عنوان اولین آرگومان می پذیرد. این کلاس هیچ سازنده عمومی ارائه نمی دهد.

در زیر توابع مختلف در کلاس Pattern آمده است:

توابع مختلف در کلاس Pattern
متدها شرح
static Pattern compile(String regex) این متد برای کامپایل regex داده شده در یک الگو استفاده می شود.
Matcher Matcher (CharSequence input) این متد یک تطبیق برای تطبیق الگو با رشته داده شده ایجاد می کند که توسط کاربر وارد می شود.
String toString() این متد نمایش رشته را برمی گرداند.
String[] split(CharSequence input) این متد یک رشته را بر اساس مطابقت ها تقسیم می کند.
Static Boolean matches(String regex CharSequence input) این روش عبارت منظم را با رشته ورودی داده شده مطابقت می دهد.

کلاس  util.regex.Matcher - از این کلاس برای اجرای عملیات تطبیق در رشته ورودی با فراخوانی تابع matcher() روی هر شی یا الگوی استفاده می شود. این کلاس هیچ سازنده عمومی را تعریف نمی کند.

در زیر توابع مختلف در کلاس Matcher آمده است:

توابع مختلف در کلاس Matcher
متدها شرح
boolean matches() این روش بررسی می کند که آیا عبارت منظم با الگو مطابقت دارد یا خیر.
boolean find() این روش وقوع regex را در یک رشته جستجو می کند.
boolean find(int start) این روش وقوع regex را در یک رشته از فهرست شروع جستجو می کند.
String group() این روش به یافتن دنباله منطبق کمک می کند.
int start() این روش به بازگرداندن نمایه شروع دنباله منطبق شده کمک می کند.
int end() این روش به برگرداندن آخرین اندیس از دنباله همسان کمک می کند.
int groupCount() این روش به برگرداندن تعداد کل دنباله های منطبق کمک می کند.

نمونه هایی از استفاده از Regular Expression در جاوا در زیر آمده است:

مثال 1: این مثال به درک عملگر نقطه در کد جاوا کمک می کند.

import java.util.regex.*;    
class reg{    
public static void main(String args[]){    
System.out.println(Pattern.matches(".r.", "arp")); // This statement displays Boolean value True because the second character is r in both string and regular exp.     
System.out.println(Pattern.matches(".bm", "abc")); //This statement displays Boolean value False because the third character is different in both string and regular exp.       
System.out.println(Pattern.matches("..m", "msm")); //This statement displays Boolean value True because the third character is m in both string and regular exp.       
System.out.println(Pattern.matches("a..s", "amns")); //This statement displays Boolean value True because the first and last character is same in both string and regular exp.      
System.out.println(Pattern.matches(".s.", "mas")); //This statement displays Boolean value False because the second character is different in both string and regular exp.       
}  
}  

خروجی کد بالا به شکل زیر است:

regex چیست و استفاده از Regular Expression در جاوا (جاوا Regex)

مثال 2: مثال زیر از کاراکترهای مختلف عبارت منظم استفاده می کند.

import java.util.regex.*;    
class Reg1{    
public static void main(String args[]){       
  
System.out.println(" 1. ");     
System.out.println(  
     Pattern.matches("^[ a-z]om", "Tom")); // This statement returns False because the string starts with the Upper-case letter which does not match with the regex.  
  
System.out.println(" 2. ");       
System.out.println(  
     Pattern.matches("[Rpq]om", "Tom")); // This statement returns False because the string starts with 'T', which does not match with any character R, P, or Q of Regex.  
  
System.out.println(" 3. ");   
System.out.println(  
     Pattern.matches("[Tt]om", "Tom")); // This statement returns True because the string starts with 'T' which matches with a character T from Regex.  
  
System.out.println(" 4. ");         
System.out.println(  
     Pattern.matches("Cat|Rat", "Rat")); // This statement returns True because the string matches with the Second part from the Regular Expression.  
  
System.out.println(" 5. ");   
System.out.println(  
     Pattern.matches("[CM]at|[Bb]ad", "Bad")); // This statement returns True because the string matches with the Second part from the Regular Expression.  
      
System.out.println(" 6. ");      
System.out.println(  
     Pattern.matches(".*bit.*", "rabbit")); // This statement returns True because the string contains the bit which match to the Regular Expression.  
  
System.out.println(" 7. ");       
System.out.println(  
     Pattern.matches("^[\\d].*", "abc")); // This statement returns True because the string starts with the letter not a digit, which does not match with the regular expression.    
  
System.out.println(" 8. ");   
System.out.println(  
     Pattern.matches("^[^\\d].*", "abc123")); // This statement returns True because the string starts with the letter, which matches with the regular expression due to the negation of digit.  
  
System.out.println(" 9. ");       
   System.out.println(  
     Pattern.matches("[a-zA-Z][a-zA-Z][0-9A-Z]", "aPz")); // This statement returns False because the last character 'z' in string does not match with the  with the '0-9A-Z' in regular expression.    
  
System.out.println(" 10. ");   
   System.out.println(  
     Pattern.matches("[a-zA-Z][a-zA-Z][a-zA-Z]", "aAA")); // This statement returns True because the all the characters in string matches with the  with the regular expression.  
  
System.out.println(" 11. ");   
System.out.println(  
     Pattern.matches("java[tT]poin[tT]$", "javaTpoint")); // This statement returns True because the string ends with the 't' character which matches with the regular expression.  
  
System.out.println(" 12. ");        
System.out.println(  
     Pattern.matches("\\D*", "abcde")); // This statement returns True because the string does not contain any digit, so it follows the regular expression.  
  
System.out.println(" 13. ");   
System.out.println(  
     Pattern.matches("\\D*", "abcde123")); // This statement returns False because the string contains the digits, so it does not follow the regular expression.  
}  
}  

خروجی کد بالا به شکل زیر است:

ریجکس چیست و استفاده از Regular Expression در جاوا (جاوا Regex)

  1. استفاده از Regular Expression یا regex در PHP
    با استفاده از توابع کتابخانه PCRE (Perl Compatible Regular Expression) می توانید از عبارت منظم (regex) در PHP استفاده کنید.
    انواع مختلفی از توابع داخلی در جدول زیر وجود دارد که برای کار با عبارات منظم استفاده می شود. این توابع به حروف بزرگ و کوچک حساس هستند.
توابع داخلی برای کار با عبارات منظم در php
تابع‌ها شرح
preg_match() اگر یک عبارت منظم با یک رشته خاص مطابقت داشته باشد، تابع preg_match() مقدار true را برمی گرداند، در غیر این صورت false.
preg_match_all() تابع ()preg_match_all برای تطبیق تمام رخدادهای الگو در یک رشته استفاده می شود.
preg_replace() تابع preg_replace() با یک الگو مطابقت دارد و سپس آن را با رشته جایگزین می کند.
preg_split() تابع preg_split() رشته را با استفاده از یک regex به زیر رشته تقسیم می کند.
preg_grep() تابع ()preg_grep برای برگرداندن تمام عناصر آرایه ورودی که با الگوی عبارت منظم مطابقت دارند استفاده می شود.

مثال‌هایی از استفاده از Regular Expression در PHP در زیر آورده شده است.

مثال 1: مثال زیر به درک نحوه استفاده از کلاس کاراکتر یا گروه در یک عبارت منظم برای تطبیق با رشته کمک می کند.

<?php  
$regExp = "/[a-zA-Z]+ \d+/";  
if (preg_match($regExp, "Januaury 26")) // This statement matches the regular expression with the string, If mathces then if statement executes, otherwise else statment.   
{  
    echo "The regular expression and string are the same.";  
} else   
{  
    echo "The regex pattern does not match with the string.";   
}  
  
?>  

خروجی قطعه کد بالا عبارت زیر خواهد بود:

The regular expression and string are the same.

مثال 2: مثال زیر به درک نحوه استفاده از کاراکتر '^' در کد PHP کمک می کند.

<?php  
$regexp = "/^J/";  
$employeenames = array("Clark Kent","John Carter", "John Rambo");  
$matches = preg_grep($regexp, $employeenames); // This statement store those names in $matches variables which are start with the Upper-case J letter.  
// Loop through matches array and display matched names  
foreach($matches as $match){  
echo $match . "<br>";  
}  
?> 

خروجی قطعه کد بالا عبارت زیر خواهد بود:

John Carter
John Rambo
  1. استفاده از عبارت منظم (regex) در پایتون (Python Regex)
    می توانید با وارد کردن ماژول re در اسکریپت خود از عبارت منظم (Regex) در کد پایتون استفاده کنید. این ماژول تابع یا روش های مختلفی را که برای مدیریت عبارت منظم استفاده می شود، تعریف می کند.

جدول زیر توابع مختلف را تعریف می کند:

توابع برای کار با عبارات منظم در پایتون
متدها شرح
re.match() متد re.match() برای برگرداندن رشته ای استفاده می شود که با عبارت منظم مطابقت دارد.
re.search() متد re.search() زمانی که الگو در یک رشته یا متن یافت می شود، یک شی از تطابق را برمی گرداند.
re.findall() متد ()re.findall برای برگرداندن یک لیست رشته ای حاوی تمام موارد منطبق استفاده می شود.
re.split() متد re.split() برای تقسیم رشته بر اساس تطبیق با عبارت منظم استفاده می شود.
re.sub() متد re.sub() برای جایگزینی رشته همسان با رشته دیگری استفاده می شود.

مثال‌هایی از استفاده از Regular Expression در پایتون در زیر آمده است:

مثال 1: این مثال به درک نحوه استفاده از متد ()finall در اسکریپت پایتون کمک می کند.

import re  
  
string = 'Fruits 32, Animals 80, Cars 34'  
pattern = '\D+'  
  
match = re.findall(pattern, string)       #This statement is used to store the matching values on the basis of a given pattern from the string.    
print(match)   #This statement displays the values which are stored in match variable

برنامه بالا پایتون با عبارت منظم خروجی زیر را می دهد:

[‘Fruits ’ , ‘, Animals ’ , ‘, Cars ’]

مثال 2: این مثال به درک نحوه استفاده از متدهای split()، search() و sub() در اسکریپت پایتون کمک می کند.

import re  
string = 'Zero:0 one:1 Two:2 Three:3 Four:4 Five:5 Six:6 Seven:7 eight:8 Nine:9 Ten:10 Twenty:20 Thirty:30 Forty:40 Fifty:50 Sixty:60 Seventy:70 Eighty:80 Ninety:90 Hundred:100'  
regex = '\d+'  
splitval = re.split(regex, string)      #This statement splits the string on the basis of matching values between pattern and string.     
print(splitval)  
string = 'a1 \nb2 \nc4'  
pattern = '\d' # This statement defines the regular expression for matching with the string.   
# empty string  
replace = 's'  
new_string = re.sub(pattern, replace, string)       # This statement replaces those matched characters with a string stored in a replace variable.   
print(new_string)    # This statement displays the new string after the replacement of characters.   text = "Regular Expression is also referred as Regex."  
regex= "\d"  
res = re.search(regex, text)   # This statement searches the regular expression in a string.   
if res:  
print("Regular expression found inside the string")  
else:  
print("Regular expression not found inside the String") 

برنامه بالا پایتون با عبارت منظم خروجی زیر را می دهد:

[‘Zero: ’, ‘ one: ’, ‘ Tow: ’, ‘ Three: ’, ‘ Four: ’, ‘ Five: ’, ‘ Six: ’, ‘ Seven: ’, ‘ eight: ’, ‘ Nine: ’, ‘ Ten: ’, ‘ Twenty: ’, ‘ Thirty: ’, ‘ Forty: ’, ‘ Fifty: ’, ‘ Sixty: ’, ‘ Seventy: ’, ‘ Eighty: ’, ‘ Ninety: ’, ‘ Hundred: ’, ‘ ’]
as 
bs 
cs
pattern not found inside the String
  1. استفاده از عبارت منظم در جاوا اسکریپت
    با استفاده از دو روش رشته زیر می توانید به راحتی از عبارت منظم در کد جاوا اسکریپت استفاده کنید:
  • Search(): این متد عبارت منظم در رشته را جستجو می کند و همچنین موقعیتی را که مطابقت پیدا شده را برمی گرداند.
  • Replace(): این متد برای برگرداندن رشته پس از جایگزینی یک کاراکتر منطبق در یک رشته استفاده می شود.

مثال هایی از عبارت منظم در جاوا اسکریپت در زیر آمده است:

مثال 1: این مثال از متد search() در اسکریپت جاوا اسکریپت برای درک عبارت منظم استفاده می کند.

<!DOCTYPE html>  
<html>  
<head>  
<script>  
var string = "Our Site is helpfull for studying about technical courses.!";   
pattern="technical";  
var res = string.search(pattern); /* This statement stores the position of the pattern in a string, if it is found in a string. */  
document.write("Position of the pattern in a string:");   
document.write(res);   
</script>  
</head>  
<body>  
</body>  
</html>

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

Position of the pattern in a string:40

مثال 2: این مثال از متد ()replace در اسکریپت جاوا اسکریپت برای درک عبارت منظم استفاده می کند.

<html>  
<head>  
<script>  
var string = "You are a Bad Student";   
var pattern=/Bad/;  
var replace="Good";  
var res = string.replace(/Bad/,replace);    
/* The above statement replaces the Bad word from the string by the Good word using the replace method. */  
document.write("After replacing the substring, the modified string is:"+ '<br>');  
document.write(res);   
</script>   
</head>  
<body>  
</body>  
</html>

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

After replacing the substring, the modified string is:
You are a Good Student

تست کدهای ریجکس به صورت آنلاین

گاهی نیاز هست ابزاری داشته باشیم که تکه کد و الگوی ما را بررسی و درستی و غلط بودن و راهنمایی لازم را داشته باشد.

سایت های ذیل برای تست کدهای ریجکس (regex) به شما کمک میکند:

https://regex101.com

https://regexr.com/3cr6f

بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده