मुझे रेगुलर एक्सप्रेशन को समझने में थोड़ी मदद चाहिए। मैंने कोड देखा

preg_match("/^ 

            (1[-\s.])?  # optional '1-', '1.' or '1' 
            ( \( )?     # optional opening parenthesis 
            \d{3}       # the area code 
            (?(2) \) )  # if there was opening parenthesis, close it 
            [-\s.]?     # followed by '-' or '.' or space 
            \d{3}       # first 3 digits 
            [-\s.]?     # followed by '-' or '.' or space 
            \d{4}       # last 4 digits 

            $/x",$number)

मैं सब समझ गया लेकिन समझ नहीं पाया कि (?(2) \) ) वास्तव में कैसे काम करता है... क्या करता है? और (2) उस में प्रतिनिधित्व करते हैं।

प्रश्न अद्यतन...

मैं आपके सभी उत्तर पढ़ता हूं .. जब मैं कोड बदलता हूं जैसे

preg_match("/^ 

            (1[-\s.])?  # optional '1-', '1.' or '1' 
            \d{3}       # the area code 
            ( \( )?     # optional opening parenthesis 
            (?(3) \) )  # if there was opening parenthesis, close it 
            [-\s.]?     # followed by '-' or '.' or space 
            \d{3}       # first 3 digits 
            [-\s.]?     # followed by '-' or '.' or space 
            \d{4}       # last 4 digits 

            $/x",$number)

मुझे त्रुटि मिलती है

Compilation failed: reference to non-existent subpattern   

क्या कोड के साथ कुछ गलत है?

0
Hacker 9 मई 2011, 08:57

2 जवाब

(2) का अर्थ है दूसरा मिलान किया हुआ टुकड़ा, यहां से: ( \( )?। तो पूरी लाइन इस तरह से काम करती है: यदि दूसरे टुकड़े का मिलान किया गया था (मतलब कि उद्घाटन कोष्ठक था), तो हमें यह सुनिश्चित करने की आवश्यकता है कि समापन कोष्ठक है।

3
Yuri Stuken 9 मई 2011, 09:04

मान लीजिए कि यह कहता है कि यह क्या करता है, दूसरे परिणाम में संग्रहीत क्षेत्र कोड की तलाश में है और यदि ऐसा है, तो इसे भी बंद कर दिया जाना चाहिए। इसका अर्थ यह है कि यह संभवत: किसी प्रकार का काम करता है 'यदि परिणाम -2 वैध है => बंद करें, और => कुछ भी नहीं'।

रेगुलर एक्सप्रेशन मेरे सबसे अच्छे दोस्त नहीं हैं, इसलिए मुझे आशा है कि मैं सही हूँ .. लेकिन मुझे उन्हें समझाने/बनाने में भी कठिनाई होती है, इसलिए शायद कोई मुझे यहाँ कुछ सिखा सकता है ;-)

वैसे, यदि आप 'PHP रेगुलर एक्सप्रेशन चीट शीट' के लिए गूगल करते हैं, तो कुछ ऐसे परिणाम हैं जो आपकी रुचि के हो सकते हैं, कम से कम वे मेरे लिए दिलचस्प हैं।

1
Joshua - Pendo 9 मई 2011, 09:05