किसी विशेष के अलावा किसी भी गैर सफेद अंतरिक्ष चरित्र का मिलान कैसे करें?


111

पर्ल में \Sकिसी भी गैर-व्हाट्सएप चरित्र से मेल खाता है।

बैकस्लैश को छोड़कर मैं किसी भी गैर-व्हाट्सएप चरित्र से कैसे मेल कर सकता हूं \?

जवाबों:


154

आप एक चरित्र वर्ग का उपयोग कर सकते हैं :

/[^\s\\]/

ऐसी किसी भी चीज़ से मेल खाता है जो न तो व्हाट्सएप चरित्र है और न ही ए \। यहाँ एक और उदाहरण है:

[abc]"मैच a, bया c" का अर्थ है ; [^abc]का अर्थ है "किसी भी चरित्र को छोड़कर a, bया c"।


^नकार के रूप में कब व्याख्या की जाती है और कब से शुरुआत होती है? इस संबंध में, यह अभ्यस्त क्यों सफेद स्थानों की संख्या के साथ शुरू होने वाली रेखा से मेल खाता है$0~/\s*^\s/
अलेक्जेंडर सेस्का

1
एक चरित्र वर्ग के बाहर, यह "स्ट्रिंग की शुरुआत" (या लाइन, वर्तमान मिलान मोड के आधार पर) है। एक चरित्र वर्ग के अंदर, और केवल अगर यह शुरुआती ब्रैकेट के बाद का चरित्र है, तो यह चरित्र वर्ग की सामग्री को नकार देता है।
टिम पीटरज़

क्या निम्नलिखित मैच लाइन सफेद $0~/\s*^\s/वर्णों के साथ शुरू होती है जो किसी भी वर्ण के बाद होती है जो कि सफेद रिक्त स्थान नहीं है
अलेक्जेंडर सेस्का

1
संभवतः यह होना चाहिए /^\s+/- लाइन की शुरुआत, उसके बाद एक या अधिक व्हाट्सएप वर्ण।
टिम पीटरज़

1
@ एलेक्सेंडरसीका, क्या आपने इसे समझ लिया है? उपरोक्त उत्तर केवल एक स्ट्रिंग का पहला मैच लौटाएगा। यदि आप चाहते हैं कि सभी मैचों को gसंशोधक में जोड़ा जाए । /[^\s\\]/g
बेन कार्प

14

आप एक लुकहेड का उपयोग कर सकते हैं:

/(?=\S)[^\\]/

2
यह आगे दिखता है अगर यह एक स्थान नहीं है। और फिर नकारात्मक वर्ग आपकी कक्षा के पात्रों को छोड़कर किसी भी चीज़ को स्वीकार करता है (जो कोई स्थान नहीं है)।
डेनिस डे बर्नार्डी

मुझे यह समाधान पसंद है। यह " /(?=\S)\W/
व्हाट्सएप

मेरे पास एक ऐसी स्थिति थी जहां मुझे किसी भी गैर व्हाट्सएप चरित्र के साथ-साथ गैर उद्धरणों से मेल खाने की जरूरत थी। इसे SPACES के लिए भी अनुमति देनी थी। उदाहरण के लिए: THIS IS A TEST, AND AGAIN। निम्नलिखित ने मेरे लिए अच्छा काम किया (?=\S)[^"]*
अरवो बोवेन

स्वीकृत जवाब मेरे लिए काम नहीं किया लेकिन यह किया। मैं इसे उदात्त पाठ regex खोज में उपयोग कर रहा था
ईसाई नोएल

5

इसने मेरे लिए sed का उपयोग करके काम किया [ संपादित करें: नीचे दिए गए बिंदुओं पर टिप्पणी करें sed से समर्थन नहीं करता है]

[^ ]

जबकि

[^\s] 

नहीं था

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g

3
\sअंतरिक्ष चरित्र से अधिक मेल खाता है। इसमें टीएबी, लाइनफीड कैरिज रिटर्न, और अन्य ( कितने अन्य रीगेक्स स्वाद पर निर्भर करता है) शामिल हैं। यह एक पर्ल आविष्कार है, मूल रूप से POSIX वर्ण वर्ग के लिए एक आशुलिपि है [:space:], और इसमें समर्थित नहीं है sed। आपका पहला रेगेक्स ऊपर होना चाहिए s/[^[:space:]g]//g
एलन मूर

Yup @AlanMoore काम करता है: echo "ghai ghai" | sed "s/[^[:space:]g]//g" पैदावार:g g
storm_m2138

1

मेरे सिस्टम पर: CentOS 5

मैं \sसंग्रह के बाहर उपयोग कर सकते हैं, लेकिन संग्रह के [:space:]अंदर का उपयोग करना है। वास्तव में मैं [:space:]केवल संग्रह के अंदर ही उपयोग कर सकता हूं । तो इसका उपयोग करने के लिए एक ही स्थान से मिलान करने के लिए मुझे उपयोग करना होगा [[:space:]] जो वास्तव में अजीब है।

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"

Result: a b cX
  • पहली जगह जिसके साथ मैं मेल खाता हूं \s
  • दूसरे स्थान के साथ मैं वैकल्पिक रूप से मेल खाता हूं [[:space:]]
  • "सभी लेकिन कोई जगह नहीं" के साथ इलेवन मैच [^[:space:]]

ये दोनों काम नहीं करेंगे:

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b

1
4.4 के रूप में, यह स्पष्ट रूप से अभी भी सच है कि आपको ([^[:space:]])इसके बजाय उपयोग करना है ([^\s])। मैं
खुले तौर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.