2009-04-24 5 views
14

मेरी समझ यह है कि नियमित अभिव्यक्तियों का जावा का कार्यान्वयन पर्ल पर आधारित है। हालांकि, निम्न उदाहरण में, यदि मैं एक ही स्ट्रिंग के साथ एक ही रेगेक्स निष्पादित करता हूं, तो जावा और पर्ल अलग-अलग परिणाम लौटाते हैं।जावा और पर्ल में नियमित अभिव्यक्ति अलग-अलग क्यों कार्य करती है?

public class RegexTest { 
    public static void main(String args[]) { 
     String sentence = "This is a test of regular expressions."; 
     System.out.println(sentence.matches("\\w") ? "Matches" : "Doesn't match"); 
    } 
} 

यह रिटर्न: से मेल नहीं खाता

यहाँ पर्ल उदाहरण है:

यहाँ जावा उदाहरण है

my $sentence = 'This is a test of regular expressions.'; 
print ($sentence =~ /\w/ ? "Matches" : "Doesn't match") . "\n"; 

यह रिटर्न: मेल

मेरे लिए

, पर्ल परिणाम समझ में आता है। यह एक शब्द चरित्र के लिए एक मैच की तलाश में है। मुझे समझ में नहीं आता कि जावा इसे एक मैच क्यों नहीं मानता है। अंतर का कारण क्या है?

उत्तर

31

जावा matches विधि यह जांच कर रही है कि रेगेक्स पूरे String से मेल खाता है या नहीं। एक स्ट्रिंग में कहीं भी रेगेक्स पाया जा सकता है, यह जांचने के लिए, Matcher बनाएं और इसकी find विधि का उपयोग करें।

10

इसके अतिरिक्त, पर्ल रेगेक्स सिंटैक्स जावा रेगेक्स सिंटेक्स है।

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

जावा में एक नियमित अभिव्यक्ति वाक्यविन्यास है जिसे "पीसीआरई" कहा जाता है, यानी: पर्ल संगत।

यह नाम हालांकि पूरी तरह से भ्रामक है, क्योंकि इसके बारे में बहुत कम है जो वास्तव में पर्ल संगत है।

उदाहरण के लिए, पर्ल नियमित अभिव्यक्ति अभिव्यक्ति अपने आप में कोड को क्रियान्वित करने परमिट, और अन्य उन्नत ऑपरेटरों के बहुत सारे है, और के रूप में वे अन्य भाषाओं (में हैं कुछ वाक्य रचना पर्ल में अलग हैं अर्थात्: कई भाषाओं शब्द सीमा के रूप में \> और \< का उपयोग मार्कर, लेकिन पर्ल सिर्फ '\ b' का उपयोग करता है)

PerlRe Documentation में से कुछ पढ़ने के लिए कुछ मिनट बिताएं और आपको बहुत सी अद्भुत चाल मिल जाएगी कि पर्ल का नियमित अभिव्यक्ति इंजन ऐसा कर सकता है जो कुछ और नहीं करता है।

+2

पीसीआरई PERL संस्करण 5 के प्रारंभिक दिनों में perl के अनुकूल था, या यह perl v4 था। निश्चित नहीं। इस बीच पर्ल का रेगेक्स बहुत आगे बढ़ गया। अधिक सामान्य प्रश्न (शीर्षक में से एक) का जवाब देने के लिए –

+0

+1। मैं यह जोड़ना चाहता हूं कि जेफरी फ्राइडल द्वारा 'मास्टरिंग रेग्युलर एक्सप्रेशन' किताब सामान्य रेगेक्स स्वादों के बीच समानताएं और अंतर को समझने के लिए बहुत अच्छी है। – Jonik

संबंधित मुद्दे