किसी शब्द या उसके उपसर्ग से मेल खाने की नियमित अभिव्यक्ति


119

मैं एक पूरे शब्द पर एक नियमित अभिव्यक्ति से मेल खाना चाहता हूं।

निम्न उदाहरण में मैं मैच के लिए कोशिश कर रहा हूँ sया seasonलेकिन क्या मैं मैच s, e, a, oऔर n

[s|season]

मैं एक पूरे शब्द से मेल खाने के लिए एक नियमित अभिव्यक्ति कैसे करूँ?


4
(season|s)इसके बजाय उपयोग करें । [season]में से किसी से मेल खाता है s, e, a, o, n
falsetru

जवाबों:


137

वर्गाकार कोष्ठक चरित्र वर्ग के लिए हैं, और आप वास्तव में से किसी एक मैच के लिए कोशिश कर रहे हैं: s, |, s(फिर), e, a, s(फिर), oऔर n

समूहन के बजाय कोष्ठक का प्रयोग करें:

(s|season)

या गैर-कब्जा समूह:

(?:s|season)

नोट: गैर-कैप्चर समूह इंजन को बताते हैं कि उसे मैच को स्टोर करने की आवश्यकता नहीं है, जबकि अन्य एक (ग्रुप कैप्चर करता है)। छोटे सामान के लिए, या तो काम करता है, 'भारी शुल्क' सामान के लिए, आप पहले देखना चाह सकते हैं कि आपको मैच की आवश्यकता है या नहीं। यदि आप ऐसा नहीं करते हैं, तो बेहतर है कि गैर-कैप्चर समूह का उपयोग करें ताकि आपको कभी भी उपयोग करने की आवश्यकता न हो।


हाँ मुझे इस बात का एहसास था। गैर-कैप्चरिंग जो मुझे चाहिए था। मुझे लगा कि () हमेशा मैच करेगा, यह जानने के लिए कि मैच नहीं करना एक विकल्प है, धन्यवाद।
NMGod

आपने गलत समझा। ?:अंदर एक उर्फ समूहीकरण non-capturingसिर्फ कहते हैं, कि आप के साथ मिलान भाव उपयोग नहीं कर सकते $1, $2और इतने पर ... अगर आप चाहते हैं कि एक अभिव्यक्ति दर्ज नहीं होता है, क्या आप की जरूरत है ^
एवरीथ्रप्लस

@ NMGodA1b2c3d4 आपका स्वागत है! क्या आपका मतलब मैच या कैच न करने का विकल्प है (इसमें अंतर है, हां)। यदि आप इनमें से किसी से भी मेल नहीं खाना चाहते हैं, तो आप इस मामले में (?! ... )इनडीड का उपयोग करेंगे (?!s|season)
जेरी

126

अपने पैटर्न का परीक्षण करने के लिए इस लाइव ऑनलाइन उदाहरण का उपयोग करें:

यहां छवि विवरण दर्ज करें

इस लाइव उदाहरण से ऊपर लिया गया स्क्रीनशॉट: https://regex101.com/r/cU5lC2/1

कमांडलाइन पर किसी भी पूरे शब्द का मिलान करना।

मैं Ubuntu 12.10 पर phpsh इंटरएक्टिव शेल का उपयोग कर रहा हूँ, preg_match के रूप में ज्ञात विधि के माध्यम से PCRE regex इंजन का प्रदर्शन करने के लिए

Phpsh शुरू करें, कुछ सामग्री को एक चर में डालें, शब्द पर मिलान करें।

el@apollo:~/foo$ phpsh

php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'

php> echo preg_match('(\w+)', $content1);
1

php> echo preg_match('(\w+)', $content2);
1

php> echo preg_match('(\w+)', $content3);
0

Preg_match विधि PHP भाषा भीतर PCRE इंजन का इस्तेमाल किया चर विश्लेषण करने के लिए: $content1, $content2और $content3साथ (\w)+पैटर्न।

$ सामग्री 1 और $ सामग्री 2 में कम से कम एक शब्द होता है, $ सामग्री 3 नहीं होती है।

वर्ड बाउंसर के बिना कमांडलाइन पर एक विशिष्ट शब्दों का मिलान करें

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(dart|fart)', $gun1);
1

php> echo preg_match('(dart|fart)', $gun2);
1

php> echo preg_match('(dart|fart)', $gun3);
1

php> echo preg_match('(dart|fart)', $gun4);
0

चर gun1और gun2स्ट्रिंग शामिल हैं dartया fartजो सही है, लेकिन बंदूक 3 में शामिल है dartyऔर अभी भी मेल खाता है, यही समस्या है। तो अगले उदाहरण पर।

शब्द सीमाओं के साथ कमांडलाइन पर विशिष्ट शब्दों का मिलान करें:

शब्द सीमाओं के साथ मिलान किया जा सकता है \b, देखें: वर्डबाउंड्री jex.im/regulex से क्या कर रही है, इसका दृश्य विश्लेषण

रेगेक्स विज़ुअल इमेज http://jex.im/regulex और https://github.com/JexCheng/regulex से प्राप्त की गई उदाहरण:

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0

php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0

यह \bदावा करते हुए कि हमारे पास एक शब्द सीमा है, सुनिश्चित करें कि "डार्ट" का मिलान किया गया है, लेकिन "डार्टी" नहीं है।


3
upvoted क्योंकि मुझे the \ b char की आवश्यकता थी, और यह नहीं पता था!
नीमीन

इसका उत्तर पूरी तरह से क्यों नहीं है?
देवलवल्ड

1
क्योंकि जिस व्यक्ति ने प्रश्न पोस्ट किया था, वह पहला उत्तर चुनकर आया था, और बाद में जब मेरा श्रेष्ठतर उत्तर आया, तो मेरे पास जाने की जहमत नहीं उठाई। आप प्रश्नकर्ता से टिप्पणी के माध्यम से प्रश्न पूछ सकते हैं, ताकि वे अपने उत्तर चयन को इस एक में बदल सकें, और यह इस पृष्ठ के मूल्य को उन लोगों के लिए बेहतर बनाएगा जो इस पर उतरते हैं।
एरिक लेसचिंस्की

1
मैंने अपवित्र किया क्योंकि आपने अपने उदाहरण में "गोज़" शब्द का उपयोग किया था ... और मुझे \ w + की आवश्यकता थी;)
कुछ


4

मैं js में उदाहरणों का परीक्षण करता हूं। सबसे सरल समाधान - बस शब्द को जोड़ने की जरूरत है यू अंदर / /:

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result

अब यदि u को सीमाओं के साथ इस विशिष्ट शब्द की आवश्यकता है, किसी अन्य संकेत-पत्र के अंदर नहीं। हम बी मार्कर का उपयोग करते हैं :

var reg = /\bcat\b/
reg.test('acatb');//1 test 
false // result
reg.test('have cat here');//2 test
true // result

हमने js में भी निष्पादन () विधि की है, जो ऑब्जेक्ट-परिणाम देता है। यह हमारे शब्द के स्थान / सूचकांक के बारे में जानकारी प्राप्त करने में मदद करता है।

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5

यदि हमें स्ट्रिंग / वाक्य / पाठ में सभी मिलान किए गए शब्द चाहिए, तो हम g संशोधक (वैश्विक मिलान) का उपयोग कर सकते हैं:

"cat good cat good cat".match(/\bcat\b/g).length
// 3 

अब अंतिम एक - मुझे 1 विशिष्ट शब्द की आवश्यकता नहीं है, लेकिन उनमें से कुछ। हम उपयोग करते हैं | हस्ताक्षर, इसका मतलब है पसंद / या।

"bad dog bad".match(/\bcat|dog\b/g).length
// 1

2

[ ]एक चरित्र वर्ग को परिभाषित करता है। इसलिए आपके द्वारा सेट किया गया हर किरदार मेल खाएगा। [012]मिलान कर देंगे 0या 1या 2और [0-2]एक ही व्यवहार करती है।

आप जो चाहते हैं वह एक या स्टेटमेंट को परिभाषित करने के लिए समूहीकरण है। (s|season)अपने मुद्दे के लिए उपयोग करें ।

Btw। आपको बाहर देखना होगा। सामान्य रेगेक्स (या एक समूह के अंदर) में मेटाचैकर चरित्र वर्ग से भिन्न होते हैं। एक चरित्र वर्ग उप भाषा की तरह होता है। [$A]केवल मैच $या A, और कुछ नहीं होगा। डॉलर के लिए यहां कोई बच नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.