عبارت منظم نوعی الگو است که می تواند روی متن اعمال شود (String، در جاوا). جاوا بسته java.util.regex را برای تطبیق عبارات منظم فراهم می کند. عبارات منظم بسیار شبیه به زبان برنامه نویسی پرل هستند و یادگیری آنها بسیار آسان است. یک عبارت منظم یا با متن (بخشی از آن) مطابقت دارد یا خیر. * اگر یک عبارت منظم با یک قطعه متن مطابقت داشته باشد، می توانیم آن را پیدا کنیم. ** اگر عبارت منظم مرکب باشد، به راحتی می توانیم بفهمیم که کدام قسمت از عبارت منظم با کدام قسمت از متن مطابقت دارد.
مثال اول
عبارت منظم " [a-z] +" با تمام حروف کوچک در متن مطابقت دارد. [a-z]به معنای هر کاراکتر از aتا zشامل و +به معنای "یک یا چند" کاراکتر است. بیایید فرض کنیم رشته "آموزش جاوا یادگیری کد 2" را ارائه می کنیم. نحوه انجام این کار در جاوا ابتدا باید یک قالب ایجاد کنید:
importjava.util.regex.*;Pattern p =Pattern.compile(“[a-z]+”);
در مرحله بعد باید matcherبا ارسال یک پیام در نمودار، متن را ایجاد کنید:
Matcher m = p.matcher(“code 2 learn java tutorial”);
نکته: سازنده هیچکدام ندارد Pattern، Matcherما آنها را با استفاده از متدهای کلاس ایجاد می کنیم Pattern. Pattern Class:شی کلاس نمایشی از یک عبارت منظم را تشکیل می دهد. کلاس Pattern هیچ سازنده عمومی ارائه نمی دهد. برای ایجاد یک الگو، ابتدا باید یکی از متدهای استاتیک عمومی را فراخوانی کنید، که سپس یک شی از کلاس را برمی گرداند Pattern. این روش ها یک عبارت منظم را به عنوان آرگومان می گیرند. Matcher Class:شی Finder موتوری است که الگو را تفسیر می کند و عملیات تطبیق را روی رشته ورودی انجام می دهد. مانند Patternیک کلاس، Matcherهیچ سازنده عمومی ندارد. Matcherبا فراخوانی یک متد matcherروی یک شی کلاس، یک شی به دست می آورید Pattern. هنگامی که این مراحل را کامل کردیم و اکنون نمونه ای از کلاس داریم Matcher m ، اکنون می توانیم بررسی کنیم که آیا الگو پیدا شده است یا نه، و اگر چنین است، در چه موقعیتی و غیره. m.matches()اگر الگو با کل رشته مطابقت داشته باشد true را برمی گرداند، در غیر این صورت false. m.lookingAt()اگر الگو با ابتدای رشته مطابقت داشته باشد true را برمی گرداند، در غیر این صورت false. m.find ()اگر الگو با هر قسمت از متن مطابقت داشته باشد true را برمی گرداند.
پس از یک تطابق موفقیت آمیز، m.start() ایندکس اولین کاراکتر مطابقت شده و m.end() شاخص آخرین کاراکتر تطبیق شده به اضافه یک را برمی گرداند. اگر تلاش ناموفقی انجام شد و مسابقه ای پیدا نشد، پرتاب می m.start()کنندm.end()IllegalStateException
این RuntimeExceptionبرای این است که شما مجبور به گرفتن آن نباشید.
شاید عجیب به نظر برسد که m.end()نمایه آخرین کاراکتر منطبق به اضافه یک را برگردانید، اما این دقیقاً همان چیزی است که اکثر نویسههای String.
مثلا،“Now is the time“.substring(m.start(), m.end())
همان رشته را برمی گرداند. بیایید نگاهی به کد بیندازیم:
importjava.util.regex.*;publicclassRegexTest{publicstaticvoidmain(String args[]){String pattern ="[a-z]+";String text ="code 2 learn java tutorial";Pattern p =Pattern.compile(pattern);Matcher m = p.matcher(text);while(m.find()){System.out.print(text.substring(m.start(), m.end())+"*");}}}
Output: code*learn*java*tutorial*
روش های اضافی
اگر مطابقت وجود دارد، پس:
m.replaceFirst(replacement)رشته جدیدی را برمی گرداند، که در آن اولین رشته فرعی که با الگو مطابقت دارد با آن جایگزین می شودreplacement
m.replaceAll(replacement)یک رشته جدید را برمی گرداند، که در آن هر زیر رشته ای که با الگو مطابقت دارد جایگزین می شود
m.find(StartIndex)مطابقت بعدی را پیدا کنید که از شاخص مشخص شده شروع می شود
m.reset()قالب را بازنشانی می کند
m.reset(NewText)یاب را بازنشانی می کند، و یک متن جدید به آن می دهد (شاید String، StringBufferیا CharBuffer)
نحو عبارت منظم
^با ابتدای یک خط مطابقت دارد.
$با انتهای رشته مطابقت دارد.
.با هر کاراکتری به جز خط جدید مطابقت دارد. استفاده از گزینه m به آن اجازه می دهد تا با یک خط جدید مطابقت داشته باشد.
[...]با هر کاراکتر درون پرانتز مطابقت دارد.
[^ ...]با هر شخصیتی که در پرانتز نیست مطابقت دارد.
\Aکل خط را شروع کنید.
\zانتهای کل خط
\Zانتهای کل خط به جز پایان دهنده خط نهایی.
re*با 0 یا بیشتر از عبارت قبلی مطابقت دارد.
re+یک یا چند مورد مطابق عبارت قبلی.
re?0 یا 1 را با محل عبارت قبلی مطابقت می دهد.
re{n}دقیقاً با N تعداد دفعات عبارت قبلی مطابقت دارد.
re{n,}N یا تعداد بیشتری از موارد عبارت قبلی را مطابقت می دهد.
re{n, m}حداقل با n و حداکثر m وقوع عبارت قبلی مطابقت دارد.
a|bبا a یا b مطابقت دارد.
(re)گروهی از عبارات منظم و به خاطر سپردن متن یافت شده.
(?: re)گروه هایی از عبارات منظم که متن یافت شده را به خاطر نمی آورند.
(?> re)با یک الگوی مستقل و بدون بازگشت مطابقت دارد.
\wحروف و اعداد [a-zA-Z_0-9] را مطابقت می دهد.
\Wاینها حروف یا اعداد نیستند.
\sفضاها را مطابقت می دهد. معادل [\t\n\r\f].
\Sکاراکترهای فضای خالی نیست.
\dاعداد را مطابقت می دهد. معادل [0-9].
\Dبا اعداد مطابقت ندارد
\Gبا امتیاز آخرین مسابقه مطابقت دارد.
\nمنطبق بر خط جدید
\bمنطبق بر یک مرز کلمه.
\Bمنطبق بر مرز یک کلمه نیست.
\n, \t, etc.کاراکترهای خط جدید، بازگشت کالسکه، برگه و غیره.
GO TO FULL VERSION