تعبيرات جافا العادية
ما هو التعبير العادي؟
التعبير العادي هو سلسلة من الأحرف التي تشكل نمط بحث. عندما تبحث عن بيانات في نص ، يمكنك استخدام نمط البحث هذا لوصف ما تبحث عنه.
يمكن أن يكون التعبير العادي حرفًا واحدًا أو نمطًا أكثر تعقيدًا.
يمكن استخدام التعبيرات العادية لإجراء جميع أنواع عمليات البحث عن النص واستبدال النص .
لا تحتوي Java على فئة Regular Expression مضمنة ، ولكن يمكننا استيراد java.util.regex
الحزمة للعمل مع التعبيرات العادية. تشمل الباقة الفئات التالية:
Pattern
فئة - تحدد نمطًا (لاستخدامه في البحث)Matcher
فئة - تُستخدم للبحث عن النمطPatternSyntaxException
فئة - تشير إلى خطأ في بناء الجملة في نمط تعبير عادي
مثال
اكتشف ما إذا كان هناك أي تكرارات لكلمة "w3schools" في جملة:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
شرح المثال
في هذا المثال ، يتم البحث عن كلمة "w3schools" في جملة.
أولاً ، يتم إنشاء النمط باستخدام Pattern.compile()
الطريقة. تشير المعلمة الأولى إلى النمط الذي يتم البحث عنه ، بينما تحتوي المعلمة الثانية على علامة تشير إلى أن البحث يجب أن يكون غير حساس لحالة الأحرف. المعلمة الثانية اختيارية.
تستخدم matcher()
الطريقة للبحث عن النمط في سلسلة. تقوم بإرجاع كائن Matcher الذي يحتوي على معلومات حول البحث الذي تم إجراؤه.
ترجع find()
الطريقة true إذا تم العثور على النمط في السلسلة و false إذا لم يتم العثور عليها.
أعلام
تعمل الإشارات في compile()
الطريقة على تغيير كيفية إجراء البحث. فيما يلي عدد قليل منهم:
Pattern.CASE_INSENSITIVE
- سيتم تجاهل حالة الأحرف عند إجراء البحث.Pattern.LITERAL
- لن يكون للأحرف الخاصة في النمط أي معنى خاص وسيتم التعامل معها على أنها أحرف عادية عند إجراء بحث.Pattern.UNICODE_CASE
- استخدمها معCASE_INSENSITIVE
العلم لتجاهل حالة الأحرف خارج الأبجدية الإنجليزية
أنماط التعبير العادي
المعلمة الأولى Pattern.compile()
للطريقة هي النمط. يصف ما يتم البحث عنه.
تستخدم الأقواس للبحث عن مجموعة من الأحرف:
Expression | Description |
---|---|
[abc] | Find one character from the options between the brackets |
[^abc] | Find one character NOT between the brackets |
[0-9] | Find one character from the range 0 to 9 |
الحروف الأولية
الحروف الأولية هي أحرف لها معنى خاص:
Metacharacter | Description |
---|---|
| | Find a match for any one of the patterns separated by | as in: cat|dog|fish |
. | Find just one instance of any character |
^ | Finds a match as the beginning of a string as in: ^Hello |
$ | Finds a match at the end of the string as in: World$ |
\d | Find a digit |
\s | Find a whitespace character |
\b | Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b |
\uxxxx | Find the Unicode character specified by the hexadecimal number xxxx |
محددو الكمية
محددات الكميات تحدد الكميات:
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n's |
n{x,y} | Matches any string that contains a sequence of X to Y n's |
n{x,} | Matches any string that contains a sequence of at least X n's |
ملاحظة: إذا احتاج تعبيرك إلى البحث عن أحد الأحرف الخاصة ، يمكنك استخدام شرطة مائلة للخلف (\) للتخلص منها. في Java ، يجب تخطي الخطوط المائلة العكسية في السلاسل ، لذا يلزم وجود شرطتين مائلتين عكسيتين للهروب من الأحرف الخاصة. على سبيل المثال ، للبحث عن علامة استفهام واحدة أو أكثر ، يمكنك استخدام التعبير التالي: "\\؟"