php
  • regex
  • string
  • 2015-06-13 10 views 6 likes 
    6

    मुझे ऊंट केस कैरेक्टर और - के साथ कुछ कैमेलकेस वर्णों को प्रतिस्थापित करने की आवश्यकता है। मैं दो समस्याएं हैंरेगेक्स चरित्र को प्रतिबिंबित करने के लिए चरित्र और हाइफ़न

    $data = preg_replace("/[^ \w]+/", '', $data); 
    $pcre = '\A\s*(.*?)\s*\x2f?(\pN+\s*[a-zA-Z]?(?:\s*[-\x2f\pP]\s*\pN+\s*[a-zA-Z]?)*)\s*\z/ux'; 
    preg_match($pcre, $data, $h); 
    

    अब,:

    मैं क्या मिल गया है उन जैसे एक स्ट्रिंग है:

    Albert-Weisgerber-Allee 35 
    Bruninieku iela 50-10 
    

    उन तार सड़क से संख्या अलग करने के इस regex के माध्यम से जा रहे हैं।

    1. मैं regex पर बहुत बुरा हूँ।

    2. ऊपर से रेगेक्स सड़कों के नाम से हर - में कटौती करता है, और जर्मनी और यूरोप में उन नामों में से बहुत सारे नाम हैं।

    वास्तव में यह काफी बस regex समायोजित करने के लिए किसी भी हाइफ़न कटौती नहीं करने के लिए आसान हो सकता है, लेकिन मुझे लगता है जानने के लिए कैसे regex काम करता है और इसलिए मैं एक regex कि बस में हर ऊंट मामले पत्र की जगह खोजने की कोशिश करने का फैसला किया चाहते हैं स्ट्रिंग

    - & matched Camel Case letter 
    

    पहले अपरकेस अक्षर उपस्थिति को छोड़कर।

    मैं एक regex कि मुझे स्थानों मैं बहुत की तरह एक हाइफन पेस्ट करने की आवश्यकता से पता चलता खोजने के लिए प्रबंधित किया है:

    .[A-Z]{1}/ug  
    

    https://regex101.com/r/qI2iA9/1

    लेकिन मैं इस स्ट्रिंग पृथ्वी पर कैसे बदलूं:

    AlbertWeisgerberAllee 
    

    है कि यह हो जाता है

    Albert-Weisgerber-Allee 
    
    +0

    तो, आपको बस इतना करना है कि अपरकेस अक्षरों से पहले एक हाइफ़न डालें, है ना? – Anonymous

    +0

    हां, केवल एक अन्य रेगेक्स के साथ एक दोषपूर्ण रेगेक्स के आउटपुट को ठीक करने के बजाय पहले एक @ अनामित – baao

    +0

    को छोड़कर, मैं आपको पहले रेगेक्स को ठीक करने के लिए अनुशंसा करता हूं (यह संभव है) संख्याओं से पहले '-' को प्रतिस्थापित न करें । बस पूरे regex खरोंच से फिर से लिखो। यदि आपने अभी तक ऐसा नहीं किया है, तो एक (लंबा) रेगेक्स ट्यूटोरियल का पालन करें, और खुद को रेगेक्स सीखने के लिए पूरे दिन या अधिक समय दें (इस समय के लिए अपनी समस्या को भूलना)। जब भी आपको रेगेक्स की आवश्यकता होती है तो यह आपके कोडिंग जीवन को बहुत कम निराशाजनक बना देगा। – hoijui

    उत्तर

    5

    डैश सम्मिलित करने के लिए इससे पहले कि टोपियां इस regex का उपयोग देखें:

    $string="AlbertWeisgerberAllee"; 
    $string=preg_replace("/([a-z])([A-Z])/", "\\1-\\2", $string); 
    
    1

    बस का उपयोग कैप्चर समूहों:

    (.)([A-Z])  //removed {1} because [A-Z] implicitly matches {1} 
    

    और $1-$2

    के साथ बदलें https://regex101.com/r/qI2iA9/3

    +1

    यह सही ढंग से 'AlbertWWeisgerberAllee' से मेल नहीं खाता है। – Anonymous

    +1

    @ अनामित 'कैमलकेस' नहीं है ... इसलिए कोई चिंता नहीं है .. यह भी 'अल्बर्ट-डब्ल्यूडब्ल्यूइजरबर्ग-एली' बनना चाहिए जो मेरा रेगेक्स करता है :) –

    +0

    [dictionary.com] के अनुसार (http: // dictionary। context.com/browse/camel%20case), ऊंट का मामला "किसी भी रिक्त स्थान और प्रारंभिक लोअरकेस या अपरकेस अक्षर वाले कंपाउंड शब्दों या वाक्यांशों को लिखने का सम्मेलन है, जिसमें प्रत्येक शेष शब्द तत्व अपरकेस अक्षर से शुरू होता है"। हालांकि, यह अंततः ओपी तक है जिसे वे पूछना चाहते थे। :) – Anonymous

    1

    आप उलझी अधिक होने लगते हैं भाव। आप पहली बार को छोड़कर किसी भी बड़े अक्षरों से पहले - जगह निम्न का उपयोग कर सकते हैं:

    (.)(?=[A-Z]) 
    

    बस $1- साथ कि बदल दें। अनिवार्य रूप से, क्या इस regex करता है:

    1. (.) किसी भी चरित्र का पता लगाएं और समूह में उस चरित्र जगह 1.
    2. (?=[A-Z]) अगर एक अपरकेस चरित्र इस प्रकार देखें।
    3. $1- यदि मिलान किया गया है, तो समूह 1 में पाए गए चरित्र के साथ प्रतिस्थापन के बाद प्रतिस्थापित करें।
    संबंधित मुद्दे