2009-04-18 20 views
30

निम्न पर्ल कोड के ग्रोवी समतुल्य क्या है?नियमित अभिव्यक्ति मिलान के लिए ग्रोवी वाक्यविन्यास

my $txt = "abc : groovy : def"; 
if ($txt =~/: (.+?) : /) { 
    my $match = $1; 
    print "MATCH=$match\n"; 
    # should print "MATCH=groovy\n" 
} 

मुझे पता है कि एक से अधिक तरीके (नियमित जावा तरीका भी शामिल है) यह करने के लिए है कि - लेकिन क्या यह कर की "ग्रूवी तरह से" क्या है?

यह करने का एक तरीका है, लेकिन यह थोड़ा बेकार लगता है - विशेष रूप से सरणी नोटेशन (m[0][1]) जो थोड़ा अजीब लगता है। क्या ऐसा कोई बेहतर तरीका है? यदि नहीं - कृपया m[0][1] के पीछे तर्क का वर्णन करें।

def txt = "java : groovy : grails" 
if ((m = txt =~/: (.+?) :/)) { 
    def match = m[0][1] 
    println "MATCH=$match" 
} 

उत्तर

13

यह पर्ल कोड के लिए निकटतम मैच है कि मैं प्राप्त कर सकता था:

def txt = "abc : groovy : def" 
if ((m = txt =~/: (.+?) : /)) { 
    def match = m.group(1) 
    println "MATCH=$match" 
} 
+1

यह प्रिंट क्या होगा? नग्न आंखों को भ्रमित लग रहा है। –

+0

यह कैसे काम करता है? यह क्या करता है नग्न आंखों को भ्रमित लग रहा है। –

+0

आप '' 'm = txt = ~ /: (। +?): /' '' अगर विवरण में भाग लेते हैं? – Sajuuk

0

यह कैसे इस का उपयोग करते हुए ग्रूवी वाक्य रचना करते हैं (लेकिन lfaraone की प्रतिक्रिया भी देखें) के मेरे सबसे अच्छे समझ है:

import java.util.regex.Matcher 

def txt = 'abc : groovy : def' 
if (txt =~ ~/ : (.+?) : /) { 
    def match = Matcher.lastMatcher[0][1] 
    println "MATCH=$match" 
} 
+0

आपके उत्तर के लिए धन्यवाद! मुझे लगता है कि यदि आपका कोई मेल नहीं है तो आपका कोड इंडेक्सऑटऑफबाउंड अपवाद के साथ असफल हो जाएगा। मैंने आपके उत्तर को देखने से पहले अपनी पोस्ट संपादित की - ताकि आप अपनी पोस्ट पर फिर से जाना चाहें। कृपया एम [0] [1] नोटेशन के बारे में सामान देखें। – knorv

+1

धन्यवाद, मैंने अपना जवाब अपडेट कर लिया है। इसके अलावा, जावा में एक मैचर में कई मैच हो सकते हैं। (पर्ल मैचों के लिए/जी ध्वज के बारे में सोचें।) पहली अनुक्रमणिका आपको उस मैच को निर्दिष्ट करने की अनुमति देती है जिसकी आप परवाह करते हैं। –

51

m[0] पहला मैच ऑब्जेक्ट है।
m[0][0] इस मैच में मेल खाने वाली सभी चीजें हैं।
m[0][1] इस मैच में पहला कैप्चर है।
m[0][2] इस मैच में दूसरा कैप्चर है।

मैं क्या पढ़ा है के आधार पर (मैं इस कार्यक्रम ग्रूवी में नहीं है या एक प्रति अपने पास रखें),

def m = "barbaz" =~ /(ba)([rz])/; 

m[0][0] दिया "bar"
m[0][1] हो जाएगी "ba"
m[0][2]"r"
हो जाएगा m[1][0]"baz"
m[1][1]"ba"होगा m[1][2] हो जाएगा "z"

मैं अगर मैं सही था या नहीं जानते हुए भी नहीं बर्दाश्त नहीं कर सकता है, तो मैं ग्रूवी डाउनलोड किया है और एक उदाहरण लिखा है:

def m = "barbaz" =~ /(ba)([rz])/; 

println "m[0][0] " + m[0][0] 
println "m[0][1] " + m[0][1] 
println "m[0][2] " + m[0][2] 
println "m[1][0] " + m[1][0] 
println "m[1][1] " + m[1][1] 
println "m[1][2] " + m[1][2] 
+1

आपके उत्तर के लिए धन्यवाद। क्या आप एक उदाहरण दे सकते हैं जब कई मिलान ऑब्जेक्ट्स हो सकते हैं (एम [1])? – knorv

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