जवाबों:
वर्गाकार कोष्ठक चरित्र वर्ग के लिए हैं, और आप वास्तव में से किसी एक मैच के लिए कोशिश कर रहे हैं: s
, |
, s
(फिर), e
, a
, s
(फिर), o
और n
।
समूहन के बजाय कोष्ठक का प्रयोग करें:
(s|season)
या गैर-कब्जा समूह:
(?:s|season)
नोट: गैर-कैप्चर समूह इंजन को बताते हैं कि उसे मैच को स्टोर करने की आवश्यकता नहीं है, जबकि अन्य एक (ग्रुप कैप्चर करता है)। छोटे सामान के लिए, या तो काम करता है, 'भारी शुल्क' सामान के लिए, आप पहले देखना चाह सकते हैं कि आपको मैच की आवश्यकता है या नहीं। यदि आप ऐसा नहीं करते हैं, तो बेहतर है कि गैर-कैप्चर समूह का उपयोग करें ताकि आपको कभी भी उपयोग करने की आवश्यकता न हो।
?:
अंदर एक उर्फ समूहीकरण non-capturing
सिर्फ कहते हैं, कि आप के साथ मिलान भाव उपयोग नहीं कर सकते $1
, $2
और इतने पर ... अगर आप चाहते हैं कि एक अभिव्यक्ति दर्ज नहीं होता है, क्या आप की जरूरत है ^
।
(?! ... )
इनडीड का उपयोग करेंगे (?!s|season)
।
इस लाइव उदाहरण से ऊपर लिया गया स्क्रीनशॉट: 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
, देखें:
रेगेक्स विज़ुअल इमेज 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
दावा करते हुए कि हमारे पास एक शब्द सीमा है, सुनिश्चित करें कि "डार्ट" का मिलान किया गया है, लेकिन "डार्टी" नहीं है।
मैं 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
[ ]
एक चरित्र वर्ग को परिभाषित करता है। इसलिए आपके द्वारा सेट किया गया हर किरदार मेल खाएगा। [012]
मिलान कर देंगे 0
या 1
या 2
और [0-2]
एक ही व्यवहार करती है।
आप जो चाहते हैं वह एक या स्टेटमेंट को परिभाषित करने के लिए समूहीकरण है। (s|season)
अपने मुद्दे के लिए उपयोग करें ।
Btw। आपको बाहर देखना होगा। सामान्य रेगेक्स (या एक समूह के अंदर) में मेटाचैकर चरित्र वर्ग से भिन्न होते हैं। एक चरित्र वर्ग उप भाषा की तरह होता है। [$A]
केवल मैच $
या A
, और कुछ नहीं होगा। डॉलर के लिए यहां कोई बच नहीं है।
(season|s)
इसके बजाय उपयोग करें ।[season]
में से किसी से मेल खाता हैs
,e
,a
,o
,n
।