عبارات باقاعده/رگکس (Java RegEx)
عبارات باقاعده (RegEx): جادویِ جستجو در متن 🔍✨
رگکس یا Regular Expressions یک زبانِ الگوسازی برای جستجو، ویرایش و اعتبارسنجیِ متنهاست. با رگکس میتوانید به راحتی بفهمید آیا یک ایمیل یا شماره موبایل فرمتِ درستی دارد یا خیر.
۱. کلاسهای اصلی (java.util.regex)
- Pattern: برای تعریفِ الگو استفاده میشود.
- Matcher: برای مقایسهیِ الگو با یک متنِ خاص استفاده میشود.
۲. کاراکترهایِ جادویی (Metacharacters) 🎭
[abc]:یعنی یکی از حروفِ a یا b یا c.[^abc]:یعنی هر کاراکتری به جز این حروف.[0-9]:یعنی هر عددی.|:یعنی این یا آن (Logical OR).
۳. تکرارکنندهها (Quantifiers)
+:یک یا چند بار تکرار.*:صفر یا چند بار تکرار.?:صفر یا یک بار.
^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$ یکی از سادهترین مدلها برایِ اعتبارسنجیِ ایمیل است.
چرا رگکس؟
بدون رگکس، برای پیدا کردنِ تمامِ شماره تلفنها در یک متنِ طولانی، باید صدها خط کدِ پیچیده با if و charAt بنویسید. با رگکس، کلِ کار در یک خط انجام میشود.
بخش تخصصی: مهندسی پیشرفته و امنیت سیستم 🛡️⚙️
در این بخش، به مفاهیمی میپردازیم که برای پایداری و امنیتِ برنامههای بزرگِ جاوا حیاتی هستند.
۱. استراتژی مدیریت استثناها (Fail-Fast vs Fail-Safe)
در طراحی سیستمهای بزرگ، ما معمولاً از الگوی Fail-Fast استفاده میکنیم؛ یعنی به محض وقوع خطا، برنامه را با یک استثنای دقیق متوقف میکنیم تا از انتشار فساد دادهها جلوگیری کنیم. همچنین، نباید استثناها را با یک بلاکِ catch خالی "خفه" کنید. هر استثنا باید حتماً لاگ (Log) شود یا به لایهی بالاتر گزارش داده شود.
۲. کالبدشکافی Autoboxing در حافظه
تبدیلِ اتوماتیکِ انواعِ Primitive به اشیاءِ Wrapper (مثل تبدیل int به Integer) در ظاهر ساده است، اما در حلقههایِ سنگین میتواند باعثِ ایجادِ هزاران شیءِ اضافه در حافظه Heap و در نتیجه فشار به Garbage Collector شود. همیشه در بخشهای حساس به پرفورمنس، از انواع Primitive استفاده کنید.
۳. پارادایم برنامهنویسی تابعی (Functional Programming)
استفاده از Lambda Expressions شروعِ حرکتِ جاوا به سمت برنامهنویسی تابعی بود. این سبک نه تنها باعثِ کوتاهتر شدنِ کدها میشود، بلکه امکانِ اجرایِ موازیِ کدها (Parallel processing) را روی پردازندههای چند هستهای بسیار سادهتر میکند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
با استفاده از متد find() در کلاسِ Matcher، بررسی کنید آیا کلمهیِ "Java" در متنِ داده شده وجود دارد یا خیر. اگر بود، "Found" را چاپ کنید.
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
Pattern p = Pattern.compile("Java");
Matcher m = p.matcher("Java is powerful");
if (m.find()) {
System.out.println("Found");
}
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.