با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. در بخش های قبلی با طرز استفاده از عملگر شرطی LIKE …% برای جستجوهای دقیق تر و فیلتر بیشتر در جداول با استفاده از الگوهای تطبیقی مانند % آشنا شدیم، با استفاده از این الگوها می توانید به عنوان مثال فیلدهایی را که با یک مقدار خاص شروع شده و یا شامل یک مقداری می شوند و … را استخراج کنید، اما گاهی ممکن است که به فیلترهای دقیق تر و استفاده از الگوهای دیگری برای استخراج داده ها نیاز داشته باشید، برای اینگونه موارد می توانید از عملگر REGEXP در MySQL استفاده کنید.
در ادامه ی این مبحث شما را با طرز کار با عملگر REGEXP در MySQL آشنا می کنیم.
اگر شما با زبان هایی مانند PHP یا PERL کار کرده باشید ، احتمالا با عملگر REGEXP آشنا هستید.
جدول زیر شامل الگوهایی است که می توان در عملگر REGEXP از آن ها استفاده کرد :
Pattern | مکان انطباق الگو |
---|---|
^ | شروع رشته |
$ | انتهای رشته |
. | هر کاراکتری |
[…] | تمام کاراکترهایی که در براکت مربع شکل لیست شده اند. |
[^…] | هر کاراکتری که در براکت مربعی لیست نشده باشد. |
p1|p2|p3 | یکی از الگوهای p1، p2 یا p3 را در نظر می گیرد. |
* | صفر یا نمونه های بیشتر از عنصر قبلی |
+ | یک یا نمونه های بیشتر از عنصر قبلی |
{n} | n نمونه از عنصر قبلی |
{m,n} | m تا n نمونه از عنصر قبلی |
مثال ها
حالا بر اساس جدول فوق، شما می توانید انواع مختلفی از پرس و جو های SQL را بر اساس انطباق با الگویی خاص استخراج کنید.
توجه داشته باشید که ما یک جدول به نام person_tbl داریم که دارای فیلدی با نام name است:
یک Query برای پیدا کردن تمام رکوردهایی که name آن ها با ‘st’ شروع می شوند :
1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st'; |
یک Query برای پیدا کردن تمام رکوردهایی که name آن ها با ‘ok’ خاتمه می یابد :
1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$'; |
یک Query برای پیدا کردن تمام رکوردهایی که name آن ها شامل ‘mar’ می باشد :
1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar'; |
یک Query برای پیدا کردن تمام رکوردهایی که name آن ها با یک حرف صدا دار شروع شده و با ‘ok’ خاتمه می یابد :
1 | mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$'; |
قبلا برای استخراج رکوردهایی از جداول بر اساس یک الگوی خاص ، با دستوراتی نظیر LIKE …% آشنا شدیم، اما با استفاده از عملگر REGEXP در MySQL می توانید الگوهای بیشتری را برای استخراج داده ها از جداول استفاده کنید.