كما نعلم جميعًا ، في تطوير البرنامج ، من المحتم أن نواجه المواقف التي تحتاج فيها السلاسل إلى مطابقة السلاسل والبحث عنها واستبدالها والحكم عليها. هذه المواقف تكون في بعض الأحيان أكثر تعقيدًا. إذا تم حلها في الترميز الخالص ، فغالبًا ما يضيع وقت المبرمجين وطاقتهم. لذلك ، أصبح التعلم واستخدام التعبيرات العادية هو الوسيلة الرئيسية لحل هذا التناقض.
كما نعلم جميعًا ، فإن التعبيرات العادية هي مواصفات يمكن استخدامها لمطابقة الأنماط واستبدالها. التعبير العادي هو نمط حرفي يتكون من أحرف عادية (مثل الأحرف من من A إلى Z) والأحرف الخاصة (metacharacters). يتم استخدامه لوصف سلاسل واحدة أو أكثر ليتم مطابقتها عند البحث عن جسم الحرفي. يعمل التعبير العادي كقالب لمطابقة نمط الأحرف مع السلسلة التي تم بحثها.
منذ أن أطلقت JDK1.4 حزمة java.util.regex ، فقد وفر لنا منصة تطبيق Java العادية التعبير العادية.
نظرًا لأن التعبيرات العادية هي نظام معقد للغاية ، سأقدم فقط بعض الأمثلة على المفاهيم التمهيدية. لمزيد من المعلومات ، يرجى الرجوع إلى الكتب ذات الصلة واستكشافها بنفسك.
// backslash
/ر فاصل ('/u0009')
/n line break ('/u000a')
/R Enter ('/u000d')
/رقم D يعادل [0-9]
/D غير رقمي يعادل [^0-9]
/s رمز فارغ [/t/n/x0b/f/r]
/S رمز غير بانك [^/t/n/x0b/f/r]
/W الحرف الفردي [A-ZA-Z_0-9]
/W حرف غير فردي [^a-za-z_0-9]
/F Break Page
/هـ هروب
/ب حدود كلمة
/ب حدود غير الكلمة
/G نهاية المباراة السابقة
^ يبدأ بالحد
^حد حالة Java هو الشخصيات التي تبدأ بـ Java
$ هي نهاية الحد
حد الحالة java $ هو شخصيات Java-End
. الحدود الشرطية أي حرف واحد باستثناء /n
Java .. بعد حد الحالة هو Java ، أي حرفين باستثناء الخط الجديد
إضافة قيود محددة "[]"
تقتصر الظروف [AZ] على حرف في نطاق صغير من A إلى Z
تقتصر الظروف [AZ] على حرف واحد في النطاق الأعظم من A إلى Z
تقتصر الظروف [A-ZA-Z] على حرف في الحرف الصغيرة من من A إلى Z أو أعلى من A إلى Z
[0-9] تقتصر الظروف على حرف واحد في نطاق صغير من 0 إلى 9
[0-9A-Z] تقتصر الظروف على النطاق الصغير من 0 إلى 9 أو A إلى Z
[0-9 [AZ]] تقتصر الظروف على النطاق الصغير من 0 إلى 9 أو A إلى Z (تقاطع)
[] وأضف حالة التقييد "[^]" مرة أخرى
[^AZ] تقتصر الظروف على حرف في نطاق غير محاط من A إلى Z
[^AZ] يحد الشرط من حرف واحد في نطاق غير CAPS A إلى Z
[^A-ZA-Z] تقتصر الظروف على حرف في نطاق غير محاط من A إلى Z أو Extravase A إلى Z
[^0-9] تقتصر الشروط على حرف واحد في نطاق غير محاط من 0 إلى 9
[^0-9a-z] تقتصر الظروف على حرف في نطاق غير محاط من 0 إلى 9 أو A إلى Z
[^0-9 [AZ]] تقتصر الظروف على حرف في نطاق غير محاط من 0 إلى 9 أو A إلى Z (تقاطع)
عندما تكون حالة التقييد هي أن حرفًا معينًا يظهر أكثر من 0 مرات ، يمكنك استخدام "*"
J* أكثر من 0 ي
.* أي حرف أعلاه 0
J.*DJ و D أي 0 أحرف
عندما تكون حالة التقييد هي أن حرفًا معينًا يظهر أكثر من مرة ، يمكنك استخدام "+"
J+ 1 أو أكثر ي
.+ 1 أو أكثر من الأحرف التعسفية
J.+1 أو أكثر بين DJ و D
عندما يكون شرط التقييد أن حرفًا معينًا يظهر 0 أو أكثر ، "؟"؟ يمكن استخدامها.
جا؟ يظهر J أو JA
الحد من الحدوث المستمر لحرف الرقم المحدد "{A}"
J {2} JJ
J {3} JJJ
أكثر من نص ، و "{a ،}"
J {3 ،} JJJ ، JJJJJ ، JJJJJ ، ؟؟؟ (J تعايش أكثر من 3 مرات)
أكثر من نص ، أقل من B "{a ، b}"
J {3،5} JJJ أو JJJJ أو JJJJJ
خذ واحدة من الاثنين
J | AJ أو أ
جافا | مرحبا جافا أو مرحبا
يحدد "()" نوع تركيبة ، على سبيل المثال ، إذا قمت بالاستعلام عن البيانات بين <a href =/"index.html/"> index </a> ، يمكنني الكتابة <a.*href =/".*/"> (.+؟) </a>
عند استخدام وظيفة pattern.compile ، يمكنك إضافة معلمات تتحكم في سلوك المطابقة للتعبيرات العادية:
Pattern Pattern.compile (سلسلة regex ، INT Flag)
نطاق قيم الأعلام كما يلي:
pattern.canon_eq يتم تحديد المطابقة إذا وفقط إذا كان "التحلل الكنسي" للشرفتين هو نفسه تمامًا. على سبيل المثال ، بعد استخدام هذه العلامة ، سوف يتطابق تعبير "A/U030A"؟ ". افتراضيًا ، لا يتم النظر في "المساواة الكنسية".
Pattern.Case_Insintivitive (؟ i) بشكل افتراضي ، فإن المطابقة غير المحددة للحالة متوفرة فقط لمجموعات الأحرف US-ASCII. يسمح هذا العلم التعبيرات بتجاهل الحالة للمطابقة. لمطابقة أحرف Unicode بحجم غير معروف ، ما عليك سوى الجمع بين Unicode_Case مع هذه العلامة.
Pattern.comments (؟ x) في هذا الوضع ، سيتم تجاهل أحرف الفضاء (في التعبيرات العادية) عند المطابقة (ملاحظة المترجم: لا تشير إلى "// s" في التعبير ، ولكنها تشير إلى المساحات ، علامات التبويب ، عودة النقل ، إلخ) في التعبير. التعليقات تبدأ في # وينتهي في هذا الخط. يمكن تمكين وضع ROW UNIX من خلال الأعلام المدمجة.
pattern.dotall (؟ s) في هذا الوضع ، التعبير "." يمكن أن تتطابق مع أي حرف ، بما في ذلك الحرف النهائي الذي يمثل خطًا. بشكل افتراضي ، التعبير "." لا يتطابق مع الطابع النهائي للخط.
Pattern.Multiline
(؟ م) في هذا الوضع ، يتطابق "^" و "$" مع بداية ونهاية الصف على التوالي. بالإضافة إلى ذلك ، لا يزال "^" يتطابق مع بداية السلسلة ، و "$" يطابق أيضًا نهاية السلسلة. بشكل افتراضي ، يتطابق هذان التعبيران فقط مع بداية ونهاية السلسلة.
pattern.unicode_case
(؟ u) في هذا الوضع ، إذا قمت أيضًا بتمكين علامة Case_insitive ، فسيتوافق مع أحرف Unicode مع حالة غير محددة. بشكل افتراضي ، لا تتوفر مطابقة غير حساسة للحالة فقط لمجموعات الأحرف الأمريكية-ASCII.
pattern.unix_lines (؟ d) في هذا الوضع ، يعتبر فقط '/n' إحباطًا من الخط والمطابقات "." ، "^" ، و "$".
وضع المفهوم الفارغ جانباً ، فيما يلي بعض حالات الاستخدام العادية Java البسيطة:
◆ على سبيل المثال ، عندما تحتوي السلسلة على التحقق
// ابحث عن سلسلة تبدأ بـ java وتنتهي عند نمط الإرادة = pattern.compile ("^java.*") ؛ Matcher Matcher = pattern.matcher ("Java ليس إنسانًا") ؛ Boolean B = matcher.matches () ؛ // عندما يتم استيفاء الشرط ، ستعود بشكل صحيح ، وإلا فالكسول. out.println (b) ؛ ◆ عند تقسيم الأوتار بظروف متعددة
pattern pattern = pattern.compile ("[، |]+") ؛ string [] strs = pattern.split ("Java Hello World Java ، Hello ،، World | Sun") ؛ for (int i = 0 ؛ i <strs.length ؛ i ++) {system.out.println (strs [i]) ؛}}} ◆ استبدال النص (يظهر الحرف لأول مرة)
نمط نمط = pattern.compile ("التعبير العادي") ؛ Matcher Matcher = pattern.matcher ("Expression Expression Hello World ، Expression Expression Hello World") ؛ // استبدل البيانات الأولى التي تتوافق مع النظام المنتظم. ◆ استبدال النص (الكل)
نمط نمط = pattern.compile ("التعبير العادي") ؛ Matcher Matcher = pattern.matcher ("Expression Expression Hello World ، Expression Expression Hello World") ؛ // استبدل البيانات الأولى التي تتوافق مع النظام المنتظم. ◆ استبدال النص (استبدال الأحرف)
Pattern Pattern = pattern.compile ("التعبير العادي") ؛ Matcher Matcher = pattern.matcher ("Expression Expression Hello World ، Expression Expression Hello World") ؛ StringBuffer SBR = جديد StringBuffer () ؛ بينما (matcher.find ()) {matcher.appendReplacement (SBR ، "java") ؛} matcher.appendtail (sbr) ؛ system.out.println (sbr.toString ()) ؛◆ تحقق مما إذا كان عنوان بريد إلكتروني
String str = "[email protected]" ؛ pattern pattern = pattern.compile ("[// w ////-/--0000@( budud// w //-0000///.)+ Budap// w //-]
◆ إزالة علامات HTML
pattern pattern = pattern.compile ("<.+؟>" ، pattern.dotall) ؛ matcher matcher = pattern.matcher ("<a href =/" index.html/"> home </a>) ؛ string string = matcher.replaceall ( ◆ ابحث عن سلسلة الشرط المقابلة في HTML
نمط نمط = pattern.compile ("href =/" (.+؟)/"") ◆ اعتراض http: // العنوان
// Intercept urlpattern pattern = pattern.compile ("(http: // | https: //) {1} [//w/////-/:]+") ؛ matcher matcher = pattern.matcher ("dsdsds <http: // dsds // gfgfdfd> fdf") ؛ بينما (matcher.find ()) {buffer.append (matcher.group ()) ؛ buffer.append ("/r/n") ؛ system.out.println (buffer.toString ()) ؛}◆ استبدل الأحرف الصينية المحددة {}
String str = "تاريخ التطوير الحالي لـ Java هو من {0} سنوات - {1} سنوات" ؛ string [] [] Object = {new string [] {"// {0 //}" ، "1995"} ، string [] {struck {string {{{1 // {1 //} "،" 2007 "} ؛ sourcestring ، Object [] Object) {String temp = sourcestring ؛ لـ (int i = 0 ؛ i <object.length ؛ i ++) {string [] result = (string []) object [i] ؛ نمط نمط = pattern.compile (النتيجة [0]) ؛ Matcher Matcher = pattern.matcher (temp) ؛ temp = matcher.replaceall (النتيجة [1]) ؛ } temp ؛}◆ ملفات الاستعلام في الدلائل المعينة مع ظروف منتظمة
// المستخدمة في قائمة ذاكرة التخزين المؤقت لعلم ملفات ArrayList الخاصة = جديد ArrayList () ؛ // تستخدم لاستضافة سلسلة PATH الخاصة _PATH ؛ // المستخدمة لاستضافة سلسلة خاصة غير مرغوب فيها Formula private _regexp ؛ class myfilefilter تنفذ filefilter { / *** اسم الملف اسم* / قبول منطقي عام (ملف الملف) {try {pattern pattern = pattern.compile (_regexp) ؛ matcher match = pattern.matcher (file.getName ()) ؛ إرجاع match.matches () ؛ } catch (استثناء e) {return true ؛ }}} / *** تحليل دفق الإدخال* param inputs* / filesAnalyze (مسار السلسلة ، regexp) {getFilename (path ، regexp) ؛ } /** * تحليل اسم الملف وإضافة ملفات * param input * /private void getFilename (مسار السلسلة ، regexp) {// directory_path = path ؛ _regexp = regexp ؛ دليل الملف = ملف جديد (_Path) ؛ file [] filesfile = directory.listfiles (new MyFileFilter ()) ؛ if (filesfile == null) return ؛ لـ (int j = 0 ؛ j <filesfile.length ؛ j ++) {files.add (filesfile [j]) ؛ } يعود؛ } / *** إظهار معلومات الإخراج* param out* / public void print (printStream Out) {iterator elements = files.iterator () ؛ بينما (elements.hasnext ()) {file file = (file) elements.next () ؛ Out.println (file.getPath ()) ؛ }} إخراج الفراغ الثابت العام (مسار السلسلة ، سلسلة regexp) {filesAnalyze fileGroup1 = new FilesAnalyze (path ، regexp) ؛ filegroup1.print (system.out) ؛ } public static void main (string [] args) {output ("c: //" ، "[az |.]*") ؛ }هناك العديد من وظائف انتظام Java. في الواقع ، طالما أنها معالجة الشخصيات ، لا يوجد شيء لا يمكن للانتظام القيام به. (بالطبع ، يستغرق الأمر الكثير من الوقت لشرحه بانتظام ||| ...)
ما سبق هو المعلومات التي تقوم بفرز تعبيرات Java العادية. سنستمر في إضافة المعلومات ذات الصلة في المستقبل. شكرا لك على دعمك لهذا الموقع!