जावा - नियमित अभिव्यक्तियाँ

जावा नियमित अभिव्यक्ति के साथ मेल खाते पैटर्न के लिए java.util.regex पैकेज प्रदान करता है। जावा नियमित अभिव्यक्ति पर्ल प्रोग्रामिंग भाषा के समान हैं और सीखने में बहुत आसान हैं।

एक नियमित अभिव्यक्ति वर्णों का एक विशेष अनुक्रम है जो आपको एक पैटर्न में आयोजित एक विशेष वाक्यविन्यास का उपयोग करते हुए, तार के अन्य तारों या सेटों को मिलाने या खोजने में मदद करता है। उनका उपयोग पाठ और डेटा को खोजने, संपादित करने या हेरफेर करने के लिए किया जा सकता है।

Java.util.regex पैकेज में मुख्य रूप से निम्नलिखित तीन वर्ग शामिल हैं -

  • Pattern Class- एक पैटर्न ऑब्जेक्ट एक नियमित अभिव्यक्ति का संकलित प्रतिनिधित्व है। पैटर्न वर्ग कोई सार्वजनिक निर्माण प्रदान नहीं करता है। एक पैटर्न बनाने के लिए, आपको सबसे पहले इसके किसी सार्वजनिक स्टेटिक का आह्वान करना होगाcompile()विधियाँ, जो तब एक पैटर्न ऑब्जेक्ट लौटाएंगी। ये विधियाँ पहले तर्क के रूप में एक नियमित अभिव्यक्ति को स्वीकार करती हैं।

  • Matcher Class- एक मिलान ऑब्जेक्ट वह इंजन है जो पैटर्न की व्याख्या करता है और एक इनपुट स्ट्रिंग के खिलाफ मैच संचालन करता है। पैटर्न वर्ग की तरह, माचिस कोई सार्वजनिक कंस्ट्रक्टर को परिभाषित नहीं करता है। आप एक निवेशक ऑब्जेक्ट प्राप्त करके प्राप्त करते हैंmatcher() एक पैटर्न ऑब्जेक्ट पर विधि।

  • PatternSyntaxException - एक PatternSyntaxException ऑब्जेक्ट एक अनियंत्रित अपवाद है जो एक नियमित अभिव्यक्ति पैटर्न में एक वाक्यविन्यास त्रुटि को इंगित करता है।

समूह पर कब्जा करना

कैप्चरिंग समूह एक एकल इकाई के रूप में कई वर्णों का इलाज करने का एक तरीका है। वे कोष्ठकों के एक सेट के अंदर रखे जाने वाले पात्रों को रखकर बनाए जाते हैं। उदाहरण के लिए, नियमित अभिव्यक्ति (कुत्ता) एक एकल समूह बनाता है जिसमें "डी", "ओ", और "जी" अक्षर होते हैं।

कैप्चरिंग समूहों को उनके शुरुआती कोष्ठकों को बाईं ओर से दाईं ओर गिना जाता है। उदाहरण में ((ए) (बी (सी)), चार ऐसे समूह हैं -

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

यह पता लगाने के लिए कि अभिव्यक्ति में कितने समूह मौजूद हैं, एक मिलान ऑब्जेक्ट पर GroupCount विधि को कॉल करें। GroupCount पद्धति एक लौटाती हैint मिलानकर्ता के पैटर्न में मौजूद कैप्चरिंग समूहों की संख्या दिखा रहा है।

एक विशेष समूह, समूह 0 भी है, जो हमेशा संपूर्ण अभिव्यक्ति का प्रतिनिधित्व करता है। यह समूह GroupCount द्वारा रिपोर्ट की गई कुल में शामिल नहीं है।

Example

निम्नलिखित उदाहरण दिखाता है कि दिए गए अल्फ़ान्यूमेरिक स्ट्रिंग से एक अंक स्ट्रिंग कैसे प्राप्त करें -

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

public class RegexMatches {

   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      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");
      }
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

Output

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

नियमित अभिव्यक्ति सिंटैक्स

यहाँ जावा में उपलब्ध सभी नियमित अभिव्यक्ति मेटाचैकर सिंटैक्स की सूची नीचे दी गई है -

उपसूचक माचिस
^ रेखा की शुरुआत से मेल खाता है।
$ रेखा के अंत से मेल खाता है।
न्यूलाइन को छोड़कर किसी भी एकल वर्ण से मेल खाता है। का उपयोग करते हुएm विकल्प इसे नई रेखा के साथ-साथ मिलान करने की अनुमति देता है।
[...] कोष्ठक में किसी एक वर्ण से मेल खाता है।
[^ ...] किसी भी एकल वर्ण को कोष्ठक में नहीं मिलाता है।
\ए पूरे स्ट्रिंग की शुरुआत।
\ z संपूर्ण स्ट्रिंग का अंत।
\ जेड स्वीकार्य अंतिम पंक्ति टर्मिनेटर को छोड़कर पूरे स्ट्रिंग का अंत।
फिर * पूर्ववर्ती अभिव्यक्ति के 0 या अधिक घटनाओं से मेल खाता है।
फिर + पिछली चीज़ के 1 या अधिक से मेल खाता है।
फिर? पूर्ववर्ती अभिव्यक्ति की 0 या 1 घटना से मेल खाती है।
पुनः {n} पूर्ववर्ती अभिव्यक्ति की घटनाओं की बिल्कुल n संख्या से मेल खाता है।
पुनः {n,} पूर्ववर्ती अभिव्यक्ति की n या अधिक घटनाओं से मेल खाता है।
पुनः {n, m} कम से कम n और पूर्ववर्ती अभिव्यक्ति के अधिकांश m घटनाओं पर मेल खाता है।
एक | ख माचिस या तो एक या बी।
(फिर से) समूह नियमित अभिव्यक्ति और मिलान किए गए पाठ को याद करता है।
(?: re) मिलान किए गए पाठ को याद किए बिना समूह नियमित अभिव्यक्ति करता है।
(?> re) बैकट्रैकिंग के बिना स्वतंत्र पैटर्न से मेल खाता है।
\ w शब्द वर्णों से मेल खाता है।
\ डब्ल्यू नॉनवर्ड अक्षरों से मेल खाता है।
\ रों व्हाट्सएप से मेल खाता है। [\ T \ n \ r \ f] के बराबर।
\ एस Nonwhitespace से मेल खाता है।
\ घ अंकों से मेल खाता है। [0-9] के बराबर।
\ डी Nondigits से मेल खाता है।
\ए स्ट्रिंग की शुरुआत से मेल खाता है।
\ जेड स्ट्रिंग के अंत से मेल खाता है। यदि कोई नई रेखा मौजूद है, तो यह नई रेखा से ठीक पहले मेल खाती है।
\ z स्ट्रिंग के अंत से मेल खाता है।
\ जी उस बिंदु से मेल खाता है जहां अंतिम मैच समाप्त हुआ था।
\ n समूह संख्या "n" पर कब्जा करने के लिए बैक-रेफरेंस।
\ b कोष्ठक के बाहर होने पर शब्द सीमा से मेल खाता है। कोष्ठक के अंदर बैकस्पेस (0x08) से मेल खाता है।
\ बी गैर-सीमा सीमाओं से मेल खाता है।
\ n, \ t, आदि। मेल खाती है नई गाड़ी, गाड़ी का रिटर्न, टैब आदि।
\ क्यू एस्केप (बोली) सभी वर्णों को \ E तक।
\इ एंड क्यू के साथ शुरू होता है।

मिलानकर्ता कक्षा के तरीके

यहाँ उपयोगी उदाहरण विधियों की एक सूची है -

सूचकांक के तरीके

सूचकांक विधियाँ उपयोगी सूचकांक मान प्रदान करती हैं जो ठीक दिखाती हैं कि इनपुट स्ट्रिंग में मैच कहाँ मिला था -

अनु क्रमांक। विधि और विवरण
1

public int start()

पिछले मैच का स्टार्ट इंडेक्स लौटाता है।

2

public int start(int group)

पिछले मैच के संचालन के दौरान दिए गए समूह द्वारा कैप्चर की गई अनुक्रमणिका का प्रारंभ सूचकांक लौटाता है।

3

public int end()

अंतिम चरित्र के मिलान के बाद ऑफ़सेट लौटाता है।

4

public int end(int group)

पिछले मैच के संचालन के दौरान दिए गए समूह द्वारा कब्जा किए गए परिणाम के अंतिम चरित्र के बाद ऑफसेट लौटाता है।

अध्ययन के तरीके

अध्ययन के तरीके इनपुट स्ट्रिंग की समीक्षा करते हैं और यह दर्शाता है कि पैटर्न पाया गया है या नहीं, एक बूलियन लौटाएं -

अनु क्रमांक। विधि और विवरण
1

public boolean lookingAt()

पैटर्न के विपरीत, क्षेत्र की शुरुआत में शुरू होने वाले इनपुट अनुक्रम से मिलान करने का प्रयास।

2

public boolean find()

पैटर्न से मेल खाने वाले इनपुट अनुक्रम के अगले क्रम को खोजने का प्रयास।

3

public boolean find(int start)

इस मिलानकर्ता को रीसेट करता है और फिर निर्दिष्ट अनुक्रम पर शुरू होने वाले पैटर्न से मेल खाने वाले इनपुट अनुक्रम के अगले क्रम को खोजने का प्रयास करता है।

4

public boolean matches()

पैटर्न के खिलाफ पूरे क्षेत्र से मेल खाने का प्रयास।

प्रतिस्थापन के तरीके

रिप्लेसमेंट मेथड्स इनपुट स्ट्रिंग में टेक्स्ट को बदलने के लिए उपयोगी तरीके हैं -

अनु क्रमांक। विधि और विवरण
1

public Matcher appendReplacement(StringBuffer sb, String replacement)

एक गैर-टर्मिनल परिशिष्ट और प्रतिस्थापित कदम लागू करता है।

2

public StringBuffer appendTail(StringBuffer sb)

एक टर्मिनल परिशिष्ट-और-प्रतिस्थापित कदम लागू करता है।

3

public String replaceAll(String replacement)

इनपुट अनुक्रम के प्रत्येक क्रम को बदलता है जो दिए गए प्रतिस्थापन स्ट्रिंग के साथ पैटर्न से मेल खाता है।

4

public String replaceFirst(String replacement)

इनपुट अनुक्रम के पहले क्रम को प्रतिस्थापित करता है जो दिए गए प्रतिस्थापन स्ट्रिंग के साथ पैटर्न से मेल खाता है।

5

public static String quoteReplacement(String s)

निर्दिष्ट स्ट्रिंग के लिए एक शाब्दिक प्रतिस्थापन स्ट्रिंग लौटाता है। यह विधि एक स्ट्रिंग का उत्पादन करती है जो शाब्दिक प्रतिस्थापन के रूप में काम करेगीs मिलानकर्ता वर्ग के परिशिष्ट पद्धति में।

शुरू और अंत के तरीके

निम्नलिखित उदाहरण है कि इनपुट स्ट्रिंग में "बिल्ली" शब्द की संख्या को गिना जाता है -

Example

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);   // get a matcher object
      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());
      }
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

Output

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

आप देख सकते हैं कि यह उदाहरण यह सुनिश्चित करने के लिए शब्द सीमाओं का उपयोग करता है कि "c" "a" "t" केवल एक लंबे शब्द में एक विकल्प नहीं है। यह कुछ उपयोगी जानकारी भी देता है कि इनपुट स्ट्रिंग में मैच कहां हुआ है।

प्रारंभ विधि पिछले मैच ऑपरेशन के दौरान दिए गए समूह द्वारा कैप्चर की गई अनुक्रमणिका का प्रारंभ सूचकांक लौटाती है, और अंतिम मिलान किए गए अंतिम वर्ण के सूचकांक को वापस लौटा देती है, साथ ही साथ एक भी।

मैचों और देख रहे तरीके

मैच और लुकअप दोनों तरीके एक पैटर्न के खिलाफ इनपुट अनुक्रम का मिलान करने का प्रयास करते हैं। हालांकि, अंतर यह है कि मैचों को पूरे इनपुट अनुक्रम का मिलान करने की आवश्यकता होती है, जबकि लुकअप नहीं करता है।

दोनों तरीके हमेशा इनपुट स्ट्रिंग की शुरुआत में शुरू होते हैं। यहाँ कार्यक्षमता की व्याख्या करने वाला उदाहरण है -

Example

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());
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

Output

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

प्रतिस्थापन और प्रतिस्थापन सभी विधियाँ

रिप्लेसमेंट और रीप्लेस ऑल विधियां उस पाठ को प्रतिस्थापित करती हैं जो किसी दिए गए नियमित अभिव्यक्ति से मेल खाता है। जैसा कि उनके नाम इंगित करते हैं, रिप्लेसफ़र्स्ट पहली घटना की जगह लेता है, और सभी घटनाओं को प्रतिस्थापित करता है।

यहाँ कार्यक्षमता की व्याख्या करने वाला उदाहरण है -

Example

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);
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

Output

The cat says meow. All cats say meow.

परिशिष्ट और परिशिष्ट तरीके

मिलानकर्ता वर्ग पाठ प्रतिस्थापन के लिए परिशिष्ट और परिशिष्ट तरीकों को भी प्रदान करता है।

यहाँ कार्यक्षमता की व्याख्या करने वाला उदाहरण है -

Example

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);
      
      // get a matcher object
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()) {
         m.appendReplacement(sb, REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

Output

-foo-foo-foo-

PatternSyntaxException क्लास के तरीके

एक PatternSyntaxException एक अनियंत्रित अपवाद है जो एक नियमित अभिव्यक्ति पैटर्न में एक वाक्यविन्यास त्रुटि को इंगित करता है। PatternSyntaxException वर्ग आपको यह निर्धारित करने के लिए निम्नलिखित तरीके प्रदान करता है कि क्या गलत हुआ है -

अनु क्रमांक। विधि और विवरण
1

public String getDescription()

त्रुटि के विवरण को पुनः प्राप्त करता है।

2

public int getIndex()

त्रुटि सूचकांक को पुनः प्राप्त करता है।

3

public String getPattern()

गलत नियमित अभिव्यक्ति पैटर्न को पुनः प्राप्त करता है।

4

public String getMessage()

सिंटैक्स त्रुटि और उसके सूचकांक, गलत नियमित अभिव्यक्ति पैटर्न, और पैटर्न के भीतर त्रुटि सूचकांक का एक दृश्य संकेत युक्त एक बहु-पंक्ति स्ट्रिंग लौटाता है।