दिलचस्प पोस्ट
विक्रेता-विशिष्ट सीएसएस घोषणाओं का क्रम कॉलिंग थ्रेड इस ऑब्जेक्ट तक नहीं पहुंच सकता क्योंकि एक अलग थ्रेड का मालिक है साझा वरीयताओं को कहाँ संग्रहीत किया जाता है? JSF में सीएसआरएफ, एक्सएसएस और एसक्यूएल इंजेक्शन हमले की रोकथाम निरीक्षण योग्य संकलन जो संग्रह के तत्वों पर भी नज़र रखता है एफसीएम (फायरबेज क्लाउड मेसेजिंग) एकाधिक डिवाइसों को भेजें iPhone 6 प्लस संकल्प भ्रम: Xcode या ऐप्पल की वेबसाइट? विकास के लिए अपवाद प्राप्त करना: 'स्प्रिंग सिक्योरिटी फ़िल्टरैन' नाम का कोई बीन परिभाषित नहीं किया गया है किसी अन्य प्रक्रिया द्वारा उपयोग की जाने वाली एक फ़ाइल को पढ़ना कैसे NSArray और NSDictionary के लिए सही गहरी प्रतिलिपि बनाने के लिए नेस्टेड एरेज़ / डिक्शनरी है? एंड्रॉइड में विदेशी कुंजी बाधाएं SQLite का उपयोग कर रही हैं? पर झरना हटाना कैसे आईओएस संस्करण की जांच करने के लिए? LINQ को इकाईयों की पहचान नहीं है Onclick घटना नहीं jsfiddle.net पर फायरिंग हेक्स बाइट के रूप में एक स्ट्रिंग प्रिंट करें?

मिक्स्डस्पेस का मिलान करें, लेकिन नई लाइनें नहीं

मैं कभी-कभी सफेद स्थान से मेल खाना चाहता हूँ, लेकिन नई लाइन नहीं

अब तक मैं [ \t] सहारा ले रहा हूं क्या कोई कम अजीब तरीका है?

वेब के समाधान से एकत्रित समाधान "मिक्स्डस्पेस का मिलान करें, लेकिन नई लाइनें नहीं"

पर्ल संस्करण 5.10 और बाद में समर्थन सहायक खड़ी और क्षैतिज चरित्र वर्ग, \v और \h , साथ ही जेनेरिक व्हाइटप्रेस वर्ण वर्ग \s

सबसे अच्छा समाधान क्षैतिज व्हाइटस्पेस वर्ण वर्ग \h का उपयोग करना है यह एएससीआईआई सेट से टैब और स्पेस से मेल खाएगा, विस्तारित एएससीआईआई से गैर-ब्रेकिंग स्पेस, या इनमें से कोई यूनिकोड वर्ण

 U+0009 CHARACTER TABULATION U+0020 SPACE U+00A0 NO-BREAK SPACE (not matched by \s) U+1680 OGHAM SPACE MARK U+2000 EN QUAD U+2001 EM QUAD U+2002 EN SPACE U+2003 EM SPACE U+2004 THREE-PER-EM SPACE U+2005 FOUR-PER-EM SPACE U+2006 SIX-PER-EM SPACE U+2007 FIGURE SPACE U+2008 PUNCTUATION SPACE U+2009 THIN SPACE U+200A HAIR SPACE U+202F NARROW NO-BREAK SPACE U+205F MEDIUM MATHEMATICAL SPACE U+3000 IDEOGRAPHIC SPACE 

ऊर्ध्वाधर अंतरिक्ष पैटर्न \v कम उपयोगी है, लेकिन इन अक्षरों से मेल खाता है

 U+000A LINE FEED U+000B LINE TABULATION U+000C FORM FEED U+000D CARRIAGE RETURN U+0085 NEXT LINE (not matched by \s) U+2028 LINE SEPARATOR U+2029 PARAGRAPH SEPARATOR 

सात ऊर्ध्वाधर व्हाइटपस वर्ण हैं जो मैच \v और अठारह क्षैतिज हैं जो मैच \h\s वीस-तीन वर्णों से मेल खाता है

सभी व्हाट्सपेस अक्षर या तो ऊर्ध्वाधर या क्षैतिज नहीं हैं, लेकिन ओवरलैप नहीं होते हैं, लेकिन वे समुचित समुच्चय नहीं हैं क्योंकि \h भी यू + 00 ए 0 नो- BREAK स्पेस से मेल खाता है, और \v U भी साथ में यू + 0085 अगली लाइन से मेल खाता है, जिनमें से कोई भी \s

डबल-नकारात्मक का प्रयोग करें:

 /[^\S\n]/ 

प्लेटफार्म अंतर से बचने के लिए perlport में \r और \n के मैपिंग के बारे में चेतावनी दी गई :

 /[^\S\x0a\x0d]/ 

यही है, न-गैर-सफेद स्थान या न-नई लाइन और पैटर्न के समान, जिसमें सीआर और एनएल शामिल नहीं है।

डी मॉर्गन के कानून के साथ बाह्य नहीं ( यानी , चरित्र वर्ग में पूरक) को वितरित करना, यह "रिक्त स्थान और कैरिज रिटर्न नहीं है और नयी रेखा से नहीं" के बराबर है, लेकिन इसके लिए अपना शब्द न ले:

 #! /usr/bin/env perl use strict; use warnings; use 5.005; # for qr// my $ws_not_nl = qr/[^\S\x0a\x0d]/; for (' ', '\f', '\t', '\r', '\n') { my $qq = qq["$_"]; printf "%-4s => %s\n", $qq, (eval $qq) =~ $ws_not_nl ? "match" : "no match"; } 

आउटपुट:

  "" => मैच
 "\ f" => मैच करें
 "\ t" => मैच करें
 "\ r" => कोई भी मैच नहीं
 "\ n" => कोई भी मैच नहीं 

ऊर्ध्वाधर टैब के अपवर्जन को ध्यान में रखें, लेकिन इसे v5.18 में संबोधित किया गया है ।

यह चाल भी वर्णमाला वर्णों के मिलान के लिए आसान है। याद रखें कि \w "शब्द वर्ण," वर्णानुक्रमिक वर्णों पर अंक और अंडरस्कोर भी मिलते हैं। हम बदसूरत-अमेरिकी कभी-कभी इसे लिखना चाहते हैं, कहते हैं,

 if (/^[A-Za-z]+$/) { ... } 

लेकिन एक डबल-नकारात्मक वर्ण-वर्ग लोकेल का सम्मान कर सकता है:

 if (/^[^\W\d_]+$/) { ... } 

यह थोड़ा अपारदर्शी है, इसलिए इरादा व्यक्त करने में एक POSIX वर्ण-वर्ग बेहतर हो सकता है

 if (/^[[:alpha:]]+$/) { ... } 

या के रूप में szbalint सुझाव दिया

 if (/^\p{Letter}+$/) { ... } 

ग्रेग के उत्तर में भिन्नता जिसमें कैरिज भी शामिल है:

 /[^\S\r\n]/ 

यह regex /[^\S\n]/ से अधिक \r साथ सुरक्षित है। मेरा तर्क यह है कि विंडोज़ \r\n न्यूलाइनों के लिए उपयोग करता है, और मैक ओएस 9 \r इस्तेमाल किया जाता है। आप आजकल \n बिना \n खोज करने की संभावना नहीं रखते, लेकिन अगर आप इसे खोजते हैं, तो इसका मतलब यह नहीं हो सकता कि कोई भी नई लाइन है इस प्रकार, चूंकि \r एक नई लाइन का अर्थ हो सकता है, हमें इसे भी बाहर करना चाहिए।

नीचे दिए गए रेगेक्स सफेद रिक्त स्थान के साथ मिलेंगे, लेकिन नयी रेखा के चरित्र की नहीं।

 (?:(?!\n)\s) 

डेमो

यदि आप गाड़ी वापसी को जोड़ना चाहते हैं तो इसके साथ \r जोड़ें ऑपरेटर ने नकारात्मक लेटरएहेड के अंदर

 (?:(?![\n\r])\s) 

डेमो

गैर-कैप्चरिंग समूह के एक या अधिक सफेद रिक्त स्थान से मेल करने के बाद + जोड़ें

 (?:(?![\n\r])\s)+ 

डेमो

मुझे नहीं पता है कि आप पीओएसआईआईएस वर्ण वर्ग [[:blank:]] का उल्लेख क्यों नहीं कर पाए, जो कि किसी भी क्षैतिज सफेद स्थान ( रिक्त स्थान और टैब ) से मेल खाता है। यह POSIX chracter वर्ग बीईई ( बेसिक रिज्यूलर एक्सप्रेशंस ), ईआरई ( विस्तारित रेगुलर एक्सप्रेशन ), पीसीआरई ( पर्ल कॉरपोरेट रेगुलर एक्सप्रेशन ) पर काम करेगा।

डेमो

क्या आप POSIX blank वर्ण वर्ग के लिए देख रहे हैं। पर्ल में यह संदर्भित है:

 [[:blank:]] 

जावा में ( UNICODE_CHARACTER_CLASS को सक्षम करने के लिए मत भूलना):

 \p{Blank} 

समान \h तुलना में, कुछ और regex इंजन ( संदर्भ ) द्वारा POSIX blank समर्थित है। एक प्रमुख लाभ यह है कि इसकी परिभाषा अनुलग्नक सी में तय की गई है: यूनिकोड नियमित अभिव्यक्ति की संगतता गुण और यूनिकोड का समर्थन करने वाले सभी रेगेक्स स्वादों में मानक। (पर्ल में, उदाहरण के लिए, \h अतिरिक्त MONGOLIAN VOWEL SEPARATOR शामिल करने का विकल्प चुनता है।) हालांकि, \h पक्ष में तर्क यह है कि यह हमेशा यूनिकोड वर्णों का पता लगाता है (भले ही इंजन सहमत न हों), जबकि POSIX वर्ण वर्ग अक्सर डिफ़ॉल्ट ASCII- केवल (जावा के रूप में) द्वारा होते हैं

लेकिन समस्या यह है कि यूनिकोड पर चिपकाने से 100% समस्या का समाधान नहीं होता है निम्नलिखित वर्णों पर विचार करें जिन्हें यूनिकोड में रिक्त स्थान नहीं माना जाता है:

  • यू + 180 ई मोंगोलियन वीवेल अल SEPARATOR
  • यू + 200 बी शून्य वाइड स्पेस
  • यू + 200 सी शून्य वर्थ गैर-जोनर
  • यू + 200 डी ज़रा वाइड जॉइनर
  • यू + 2060 शब्द जोन्नेर
  • यू + एफईएफएफ शून्य शून्य गैर-ब्रेकिंग स्पेस

    https://en.wikipedia.org/wiki/White-space_character से लिया गया

पूर्ववर्ती मंगोलियाई स्वर विभाजक शायद एक अच्छा कारण के लिए शामिल नहीं है। यह, 200 सी और 200 डी के साथ, शब्द (एएफएआईके) के भीतर होते हैं, और इसलिए कार्डिनल नियम को तोड़ता है कि अन्य सभी व्हाट्सपेस का पालन होता है: आप इसके साथ टोकन कर सकते हैं। वे संशोधक की तरह अधिक हैं हालांकि, ZERO WIDTH SPACE , WORD JOINER , और ZERO WIDTH NON-BREAKING SPACE (यदि यह बाइट-ऑर्डर चिह्न के अलावा अन्य के रूप में उपयोग किया गया था) मेरी पुस्तक में व्हाइटपेज नियम को फिट करता है इसलिए, मैं उन्हें अपने क्षैतिज श्वेत स्थान वर्ण वर्ग में शामिल करता हूं।

जावा में:

 static public final String HORIZONTAL_WHITESPACE = "[\\p{Blank}\\u200B\\u2060\\uFFEF]" 

m/ /g बस में स्थान दे, / / , और यह काम करेगा या \S उपयोग करें – यह टैब, न्यूलाइन, रिक्त स्थान आदि जैसे सभी विशेष वर्णों को बदल देगा।