Latest web development tutorials

جافا التعابير العادية

ويعرف التعبير العادية سلسلة نمط.

التعابير العادية يمكن استخدامها للبحث، تحرير، أو معالجة النصوص.

التعابير العادية لا تقتصر على لغة معينة، ولكن هناك بعض الفروق البسيطة في كل لغة.

جافا التعابير العادية وبيرل هو الأكثر مماثلة.

وتشمل حزمة java.util.regex الفئات الثلاث التالية:

  • فئات نمط:

    نمط الكائن العادية تمثيل مترجم التعبير. الطبقة نمط لا يوجد لديه منشئ العام. لإنشاء كائن نمط، يجب أولا استدعاء أسلوب ثابت العام في الترجمة التي تقوم بإرجاع كائن نمط. يأخذ هذا الأسلوب التعبيرات العادية الأولى حجتها.

  • فئات المنظر:

    كائن المنظر هو تفسير سلسلة الإدخال وعملية مطابقة للمحرك. مثل الطبقة نمط، المنظر لا يوجد لديه منشئ العام. تحتاج إلى استدعاء أسلوب الكائن نمط المنظر للحصول على كائن المنظر.

  • PatternSyntaxException:

    PatternSyntaxException هي فئة استثناء غير الإلزامية التي تمثل العادية أخطاء في بناء الجملة نمط التعبير.


مجموعة التقاط

مجموعة التقاط هي أحرف متعددة عند واحدة طرق العلاج وحدة، من خلال شخصيات مجمعة بين قوسين لخلق.

على سبيل المثال، التعبير العادي (الكلب) بإنشاء مجموعة واحدة، والمجموعة التي تحتوي على "د"، "س"، و "ز".

مجموعة أسر عن طريق حساب قوس فتح لها مرقمة من اليسار إلى اليمين. على سبيل المثال، في التعبير ((A) (B (C)))، وهناك أربع هذه المجموعات:

  • ((A) (B (C)))
  • (A)
  • (B (C))
  • (C)

عن طريق استدعاء المنظر كائن groupCount طريقة لمعرفة عدد التعبير الحزم. طريقة groupCount بإرجاع عدد صحيح يمثل الكائن المنظر لديها حاليا مجموعة الالتقاط متعددة.

وهناك مجموعة خاصة (مجموعة 0)، فإنه يمثل دائما التعبير بالكامل. لم يتم تضمين مجموعة في قيمة الإرجاع groupCount.

أمثلة

يوضح المثال التالي كيفية العثور على سلسلة من الأرقام من سلسلة معينة:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

التعبير اللغوي العادي

شخصية

تفسير

\

يتم وضع علامة على الحرف التالي كحرف خاص، والنص، والعودة المراجع أو الهروب ثماني. على سبيل المثال، "ن" مباريات حرف "ن". "\ N" يطابق حرف السطر. تسلسل "\\" مباريات "\"، "\ (" ماتش "(".

^

تطابق تبدأ سلسلة الإدخال. إذا قمت بتعيينمتعدد الأسطر التعبير العاديالممتلكات موقف مطابقة الكائن وأيضا ^ "\ ن" أو "\ ص" بعد.

$

تطابق نهاية مدخلات موقف السلسلة. إذا كانت الخاصيةمتعدد الأسطر الكائن التعبير العادي،و$ أيضا مباريات مع "\ ن" أو وضع "\ ص" من قبل.

*

صفر أو أكثر مرة مباريات الحرف السابق أو التعبير الفرعي. على سبيل المثال، زوي * يطابق "ض" و "حديقة الحيوان". * أي ما يعادل {0،}.

+

واحد أو أكثر من مرة مباريات الحرف السابق أو التعبير الفرعي. على سبيل المثال، "زوي +" و "زوي" ومباراة "حديقة الحيوان"، ولكن "ض" لا تتطابق. + هل ما يعادل {1}.

؟

صفر أو واحد يطابق الحرف السابق أو التعبير الفرعي. على سبيل المثال، "لا (عناوين)؟" المباريات على "لا" أو "لا" في "ليفعل". ؟ أي ما يعادل {0،1}.

{N}

نعدد صحيح غير سالب. تطابق الأوقات بالضبطن.على سبيل المثال، "يا {2}" و "بوب" في "س" لا تتطابق، ولكن "الغذاء" من "س" مباراتين.

{N،}

نعدد صحيح غير سالب. مباراة على الأقلnمرة. على سبيل المثال، "يا {2،}" لا يطابق "بوب" في "س"، ومباراة "foooood" جميع س. "يا {1،}" ما يعادل "س +". "يا {0،}" ما يعادل "س *".

{N،م}

Mوعدد صحيحنغيرسلبي،حيثn<= م. مباراة على الأقلن وفيمعظم الأوقاتم.على سبيل المثال، "يا {1،3}" مباريات "fooooood" في س الثلاثة الاولى. يا {0،1} 'ما يعادل' س؟ ". ملاحظة: لا يمكن إدراج المسافات بين الفواصل والأرقام.

؟

عندما جاءت الشخصيات في أي التصفيات المؤهلة الأخرى (*، +،؟، { N}، {ن،}، {ن، م}) في وقت لاحق، ونمط مطابقة هو "غير الجشع". "غير الجشع" نمط مطابقة للبحث عن الممكنة سلسلة قصيرة، والافتراضية نمط "الجشع" مطابقة للبحث عن سلسلة طويلة الممكنة. على سبيل المثال، في سلسلة "منتصف الليل" في "س +؟" مباريات فقط "س" واحد، و "س +" تتطابق مع كل "س".

.

يطابق أي حرف واحد باستثناء "\ ص \ ن" هو. لتتناسب تشمل "\ ص \ ن"، بما في ذلك أي من الأحرف، مثل نمط استخدام "[\ ق \ S]" أو ما شابه ذلك.

(نمط)

مطابقةنمطوالقبض على التعبير الجزئي من المباراة. يمكنك استخدام خصائص$ 0 ... $ 9 تطابق النتائج من مجموعة "مطابقة" لاسترداد القبض عليه.لتتناسب قوسين حرفا ()، استخدم "\ (" أو "\)."

(؟:نمط)

مطابقةنمطولكن لا التقاط التعبير الجزئي المباراة أنها مباراة غير الالتقاط، لا يتم تخزين مطابقة لاستخدامها لاحقا. هذا هو للاستخدام "أو" حرف (|) عندما مكونات وضع مزيج مفيد. على سبيل المثال، "صناعة (: Y | المنشأ) هي نسبة" صناعة | التعبير أكثر اقتصادا الصناعات.

= نمط)

أداء الأمام التنبؤ التعبير الجزئي أول سلسلة البحث سلسلةنمطمطابقة في نقطة الانطلاق للمطابقة التعبير. إنها مباراة غير الالتقاط، لا التقاط مباراة لاستخدامها لاحقا. على سبيل المثال، 'ويندوز (= 95 |؟ 98 | NT | 2000) "مطابقة" ويندوز 2000 "" ويندوز "، ولكن لا يتطابق مع" ويندوز 3.1 "في" ويندوز ". Lookahead لا تأخذ الطابع هو، بعد حدوث مباراة، المباراة المقبلة للبحث على الفور بعد المباراة الأخيرة، وليس بعد توقعات الأول في تكوين الحروف.

(؟!نمط)

Lookahead التعبير الجزئي إجراء بحث عكسي، والتعبير لا تتطابق معنمطسلسلة مطابقة في نقطة الانطلاق لسلسلة البحث. إنها مباراة غير الالتقاط، لا التقاط مباراة لاستخدامها لاحقا. على سبيل المثال، 'ويندوز (95 | 98 ؟! | NT | 2000) "يتطابق مع" ويندوز 3.1 "في" ويندوز "، ولكن لا يتطابق مع" ويندوز 2000 "" ويندوز ". Lookahead لا تأخذ الطابع هو، بعد حدوث مباراة، المباراة المقبلة للبحث على الفور بعد المباراة الأخيرة، وليس بعد توقعات الأول في تكوين الحروف.

س|ذ

مباراةXأوY.على سبيل المثال، 'ض | الغذاء "مباريات" ض "أو" المواد الغذائية ". "(Z | و) العود" مباراة "zood" أو "المواد الغذائية".

[س ع ص]

مجموعة الأحرف. مباريات تضمن أي حرف. على سبيل المثال، "[ABC]" مباريات "سهل" في "أ".

[^س ع ص]

مجموعة الأحرف العكسي. مباريات أي حرف غير المدرجة. على سبيل المثال، "[^ اي بي سي]" مباريات "سهل" في "ص"، "ل"، "أنا"، "ن".

[من الألف إلى الياء]

مجموعة من الأحرف. يطابق أي حرف داخل النطاق المحدد. على سبيل المثال، "[من الألف إلى الياء]" مباريات "أ" إلى أي أحرف صغيرة في مجموعة "ض".

[^من الألف إلى الياء]

مجموعة العكسي من الأحرف. مباريات أي حرف يست ضمن النطاق المحدد. على سبيل المثال، "[^ من الألف إلى الياء]" يطابق أي لا "أ" إلى أي من الأحرف في مجموعة "ض".

\ B

مباريات حدود الكلمة، وهذا هو، والموقف من كلمة والفراغات بين. على سبيل المثال، "إيه \ ب" تطابق "أبدا" في "إيه"، ولكن لا يطابق "الفعل" في "إيه".

\ B

مباراة غير كلمة للحدود. "إيه \ B" يتطابق مع "الفعل" في "إيه"، ولكن لا يطابق "أبدا" في "إيه".

\ج س

حرف تحكم المباراة أشار كتبهاx.على سبيل المثال، \ سم مباريات تحكم M أو إرجاع. يجب أن تكونقيمة xبين الالف إلى الياء أو الألف إلى الياء. إذا لم يكن كذلك، فمن المفترض أن ج هي "ج" الحرف نفسه.

\ D

مطابقة أحرف رقمية. أي ما يعادل [0-9].

\ D

تطابق أحرف غير رقمية. وهو ما يعادل [^ 0-9].

\ F

مباراة Formfeed. أي ما يعادل \ x0c و\ CL.

\ N

تطابق سطر جديد. أي ما يعادل \ x0a و\ CJ.

\ R

مباريات حرف إرجاع. أي ما يعادل \ x0d و\ سم.

\ S

يطابق أي أحرف المسافات البيضاء، بما في ذلك المسافات، علامات، فواصل الصفحات، الخ أي ما يعادل [\ و \ ن \ ص \ ر \ ت].

\ S

يطابق أي أحرف غير مسافة بيضاء. أي ما يعادل [^ \ و \ ن \ ص \ ر \ ت].

\ T

مباراة التبويب. و\ X09 و \ CI ما يعادلها.

\ V

مباريات حرف جدولة العمودي. و\ x0b وتعادل \ CK.

\ W

مباريات أي حرف من الدرجة شخصية، بما في ذلك تسطير. و"[A-زا-z0-9_]" ما يعادلها.

\ W

مباريات أي حرف غير كلمة. و"[^ A-زا-z0-9_]" ما يعادلها.

\س ن

مباراةن،ن هنا هو عشري رموز الهروب. يجب أن يكون رمز الهروب عشري بالضبط رقمين طويلة. على سبيل المثال، "\ X41" مطابقة "A". "\ X041" و "\ X04" و "1" هي ما يعادلها. يسمح باستخدام الرمز تعبيرات ASCII منتظم.

\الصيغة الرقميه

مباراةالأسطوانات،الأسطوانات هنا هو عدد صحيح موجب. لالتقاط مطابقة backreferences. على سبيل المثال، "(.) \ 1" مباريات حرفين متطابقة متتالية.

\N

يحدد رمز هروب ثماني أو العودة المراجع. إذا \نيسبقه subexpressions على الأقلنالقبض عليه، ثمnهو backreference. خلاف ذلك، إذا كانnهو عدد ثماني (0-7)، ثمnهو رموز الهروب ثماني.

\نيوتن متر

يحدد رمز هروب ثماني أو العودة المراجع. إذا \نانومترأمام التعبير الجزئي القبضنانومترعلى الأقل، ثمنانومترهو backreference. إذا \نانومترعلى الأقلأمامالتقاطن،ن هو backreference، تليها الطابعم.إذا كانت الحالات السابقتين ليست موجودة،\نانومتر مبارياتنانومترقيمةثماني،حيثnوmوالأرقام ثماني (0-7).

\ NML

عندمانهو عدد ثماني(0-3)،M وLوثماني (0-7)، كان يتطابق مع رموز الهروب ثمانيالمنطقة الحرام.

\ش ن

مبارياتحيثnهو حرف Unicode يمثلها أربعة أرقام ست عشرية. على سبيل المثال، \ u00A9 يطابق رمز حقوق التأليف والنشر (©).

أساليب الفئة المنظر

طريقة مؤشر

وتوفر وسائل مؤشر قيم مؤشر مفيدة تشير بالتحديد مكان العثور على المباريات سلسلة الإدخال:

لا. طريقة والوصف
1 بداية كثافة العمليات العامة ()
إرجاع المؤشر الأولي من المباراة السابقة.
2 الباحث العام بداية (مجموعة كثافة العمليات)
مرة أخرى في عملية خلال المباراة السابقة، التي استولت عليها مجموعة معينة من مؤشر أولي تسلسل الفرعي
3 نهاية كثافة العمليات العامة ()
بإرجاع تعويض بعد مطابقة الحرف الأخير.
4 نهاية كثافة الجمهور (مجموعة كثافة العمليات)
مرة أخرى في عملية خلال المباراة السابقة، من خلال معطى تعويض بعد آخر مجموعة من الأحرف بعد سلسلة من القبض عليه.

مناهج البحث

الطرق المستخدمة للتحقق من سلسلة الإدخال وإرجاع قيمة منطقية تشير إلى ما إذا كان أو لم يتم العثور على نمط:

لا. طريقة والوصف
1 lookingAt منطقية الجمهور ()
جرب منطقة من بداية بداية تسلسل المدخلات يطابق النمط.
2 العثور منطقية العامة ()
محاولة للعثور على تسلسل المدخلات التي تتوافق مع نمط تسلسل المقبل.
3 العثور منطقية العام (كثافة بداية)
يعيد هذا المنظر ثم يحاول العثور على تطابق للنموذج، أدخل الفرعي التالي تسلسل بدءا من الفهرس المحدد.
4 مباريات منطقية العامة ()
حاول المنطقة ونمط كامل مطابقة.

طريقة الاستبدال

البديل هو ليحل محل سلسلة في طريقة إدخال النص:

لا. طريقة والوصف
1 الجمهور المنظر appendReplacement (StringBuffer بينالي الشارقة، سلسلة استبدال)
لتحقيق إضافات غير الطرفية وخطوة بدائل.
2 الجمهور StringBuffer appendTail (StringBuffer بينالي الشارقة)
تحقيق إضافات الطرفية وخطوة بدائل.
3 جمهور سلسلة replaceAll (استبدال سلسلة)
وضع الاستبدال مع سلسلة الاستبدال نظرا لتتناسب مع تسلسل المدخلات لكل تسلسل.
4 جمهور سلسلة replaceFirst (استبدال سلسلة)
وضع الاستبدال مع سلسلة الاستبدال نظرا مطابقة تسلسل المدخلات من أول تسلسل الفرعي.
5 الجمهور ساكنة سلسلة quoteReplacement (سلسلة ق)
بإرجاع سلسلة سلسلة استبدال حرفية. هذا الأسلوب بإرجاع سلسلة التي يتم تمريرها كوسيلة لعمل الطبقة appendReplacement المنظر كسلسلة حرفية.

بدء ونهاية طريقة

هنا مثال لعدد من الحوادث في سلسلة الإدخال لحساب كلمة يبدو "القط":

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

ويمكن ملاحظة ذلك باستخدام المثال حدود الكلمة، للتأكد من أن حرف "ج" "أ" "تي" ليست مجرد طويلة وفرعية كلمة. كما يوفر بعض المعلومات المفيدة عن سلسلة الإدخال تلاءم المواقف.

طريقة بداية إرجاع عملية خلال المباراة السابقة، من المؤشر قدمت جماعة القبض متتالية جزئية الأولي، إنهاء أسلوب مطابقة مؤشر الماضي بالإضافة إلى حرف واحد.

مباريات وطريقة lookingAt

وتستخدم المباريات وطرق lookingAt في محاولة لمطابقة سلسلة من نمط الإدخال. وهي تختلف عن متطلبات برمتها مباراة تسلسل المنظر، ولكن lookingAt غير مطلوب.

وغالبا ما تستخدم هذه الأساليب اثنين في وتبدأ سلسلة الإدخال.

من خلال المثال التالي لشرح هذه الميزة:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "foo";
    private static final String INPUT = "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main( String args[] ){
       pattern = Pattern.compile(REGEX);
       matcher = pattern.matcher(INPUT);

       System.out.println("Current REGEX is: "+REGEX);
       System.out.println("Current INPUT is: "+INPUT);

       System.out.println("lookingAt(): "+matcher.lookingAt());
       System.out.println("matches(): "+matcher.matches());
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

طرق replaceFirst وreplaceAll

replaceFirst وreplaceAll طريقة تستخدم لتحل محل مطابقة نص التعبير العادية. الفرق هو، replaceFirst استبدال المباراة الأولى، replaceAll استبدال جميع المباريات.

المثال التالي لشرح هذه الميزة:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static String REGEX = "dog";
    private static String INPUT = "The dog says meow. " +
                                    "All dogs say meow.";
    private static String REPLACE = "cat";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       // get a matcher object
       Matcher m = p.matcher(INPUT); 
       INPUT = m.replaceAll(REPLACE);
       System.out.println(INPUT);
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

The cat says meow. All cats say meow.

طرق appendReplacement وappendTail

يوفر الدرجة المنظر أيضا وسيلة لappendTail appendReplacement واستبدال النص:

ننظر إلى المثال التالي لتوضيح هذه الميزة:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      // 获取 matcher 对象
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()){
         m.appendReplacement(sb,REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

الأمثلة المذكورة أعلاه جمعت النتائج على النحو التالي:

-foo-foo-foo-

أساليب الفئة PatternSyntaxException

PatternSyntaxException هي فئة استثناء غير الإلزامية، وهو ما يشير إلى أخطاء في بناء الجملة العادية نمط التعبير.

توفر الطبقة PatternSyntaxException الطرق التالية لمساعدتنا في معرفة ما حدث خطأ.

لا. طريقة والوصف
1 جمهور سلسلة getDescription ()
الحصول على وصف الخطأ.
2 getIndex كثافة الجمهور ()
الحصول على الفهرس غير صحيح.
3 جمهور سلسلة getPattern ()
الحصول على خاطئا نمط التعبير العادية.
4 جمهور سلسلة getMessage ()
بإرجاع سلسلة متعدد الخطوط تحتوي على وصف لخطأ في بناء الجملة ومؤشره، إشارة مرئية من نمط التعبير العادي الخاطئ، ومؤشر خطأ.