2016-12-25 5 views
5

मैं एक स्ट्रिंग में कम से कम दोगुना नई लाइन (\ n \ n) की अंतिम बार होने प्रतिस्थापित करने की आवश्यकता है, तो यह होना चाहिए हो \ n \ n या \ n \ n n \ या \ n \ n \ n \ n एक इतने पर (कम से कम 2 \ n) "@@" द्वारा। मुझे लगता है कि यह preg_replace होना चाहिए। मैंने स्टैक ओवरफ्लो पर उत्तर में दिए गए कई विकल्पों का प्रयास किया है, लेकिन इन सभी विकल्पों में कुछ ऐसे मामले हैं जो कैच नहीं किए गए थे। मैंने नियमित अभिव्यक्ति तैयार करने के लिए regex101 साइट की कोशिश की, लेकिन मैं इसमें मजबूत नहीं हूं, इसलिए मुझे कुछ समाधान मिला जो साइट पर काम करने जैसा दिखता है (/((\\n){2,})+(?!.*((\\n){2,})+)/i), लेकिन जब मैं इसे अपने कोड में कोशिश कर रहा हूं, तो मैं काम नहीं करता हूं।स्ट्रिंग PHP में कम से कम दोगुना नई लाइन के अंतिम घटना ( n n) की जगह

एक और एक ([\\n\\n])+(.[^\\n\\n])*$ था, लेकिन इस एक भी catched पिछले nn

परीक्षण स्ट्रिंग यह थी:

संग्रहण \ n शक्तिशाली क्वाड-कोर ट्रांसफार्मर बुक T101HA में इंटेल X5 प्रोसेसर आप का अर्थ है ' आपके सभी रोज़गार कार्यों के माध्यम से कोई समस्या नहीं होगी, \ nwith निर्बाध मल्टीटास्किंग आपको कम समय में और अधिक करने की अनुमति देगी। भंडारण आसानी से लचीला भी है। अंदर, 128 जीबी सुपर-फास्ट फ्लैश स्टोरेज है, और यह माइक्रो एसडी कार्ड स्लॉट के माध्यम से आसानी से विस्तार योग्य है। आप एएसयूएस वेबस्टॉरेज पर एक वर्ष का मुफ्त असीमित क्लाउड स्टोरेज भी प्राप्त करते हैं! \ N \ n रंग | व्हाइट/गोल्ड \ n \ n \ n \ n \ n \ nCPU | इन डीएसएफडीएसएफडीएफ \ n \ n \ n \ n \ n \ n \ n \ n dfnn

तो परिणाम होना चाहिए:

संग्रहण \ n शक्तिशाली क्वाड-कोर इंटेल X5 ट्रांसफार्मर बुक T101HA में प्रोसेसर मतलब है कि आप अपने सभी रोजमर्रा के माध्यम से breezing कोई समस्या नहीं होगा कार्य, \ nwith निर्बाध मल्टीटास्किंग आपको कम समय में और अधिक करने की इजाजत देता है। भंडारण आसानी से लचीला भी है। अंदर, 128 जीबी सुपर-फास्ट फ्लैश स्टोरेज है, और यह माइक्रो एसडी कार्ड स्लॉट के माध्यम से आसानी से विस्तार योग्य है। तुम भी आप ASUS WebStorage पर एक वर्ष के नि: शुल्क असीमित क्लाउड मेमोरी प्राप्त \ n \ nColor |! गोरी/गोल्ड \ n \ n \ n \ n \ n \ nCPU | Innn dsafdsfdfa @@

कर सकते हैं किसी को भी dfnn इसके साथ मदद करें और शायद इसके अलावा उत्तर regex के तर्क की व्याख्या।

बहुत बहुत धन्यवाद।

+0

ध्यान दें कि आप बिना किसी लुकहेड के [लालच] (http://www.regular-expressions.info/repeat.html#greedy) के उपयोग से ऐसा कर सकते हैं। ['/^.*\V\K\R{2,}/s'](https://www.regex101.com/r/zOmdJ5/1) के लिए खोजें और' @@ 'के साथ प्रतिस्थापित करें। '। *' अंतिम '\ V' * गैर-लंबवत स्थान * तक खा जाएगा, जिसके बाद दो या दो से अधिक न्यूलाइन' \ R' है। ['\ K' रीसेट] (http://www.rexegg.com/regex-php.html#K) रिपोर्ट किए गए मैच की शुरूआत (कहां से बदलना शुरू करें)। [Eval.in पर यह डेमो] देखें (https://eval.in/704280)। –

उत्तर

5

आप उपयोग कर सकते हैं

/\n{2,}(?!.*\n{2})/s 

regex demo

विवरण देखें:

  • \n{2,} - 2 या अधिक नई-पंक्तियों
  • (?!.*\n{2}) - किसी भी 0+ वर्ण बाद का पालन नहीं 2 न्यूलाइन के साथ।

यदि कोई लाइनब्रेक मतलब है, तो \n\R के साथ बदलें।

+0

बहुत बहुत धन्यवाद, मैंने कुछ बदलाव किया है क्योंकि मुझे पता चला है कि मेरी स्ट्रिंग ** ** से पहले ** \ r ** के साथ आता है ** इसलिए मेरे मामले में अंतिम समाधान '/ (\ r \ n) { 2,} (?!। * (\ R \ n) {2})/s' – IncreMan

+0

असल में, वह जगह है जहां '\ R' आसान है -'/\ R {2,} (?! * * \ R { 2})/एस', '\ R' किसी भी लाइन ब्रेक, सीआरएलएफ, सीआर और एलएफ से मेल खाता है। –

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