"स्टॉप" से शुरू होने वाले स्ट्रिंग से मेल खाने की नियमित अभिव्यक्ति


97

मैं एक स्ट्रिंग की शुरुआत में एक शब्द से मेल खाने के लिए एक नियमित अभिव्यक्ति कैसे बना सकता हूं। हम stopएक स्ट्रिंग की शुरुआत में मैच देख रहे हैं और कुछ भी इसका अनुसरण कर सकता है।

उदाहरण के लिए अभिव्यक्ति का मिलान होना चाहिए:

stop
stop random
stopping

धन्यवाद।

जवाबों:


184

यदि आप स्टॉप यूज़ से शुरू होने वाली केवल लाइनों का मिलान करना चाहते हैं

^stop

यदि आप एक स्थान के बाद शब्द स्टॉप से ​​शुरू होने वाली रेखाओं से मेल खाना चाहते हैं

^stop\s

या, यदि आप शब्द स्टॉप से ​​शुरू होने वाली रेखाओं का मिलान करना चाहते हैं, लेकिन इसके बाद एक स्थान या कोई अन्य गैर-शब्द वाला चरित्र जिसे आप उपयोग कर सकते हैं (आपका रेगेक्स स्वाद अनुमति)

^stop\W

दूसरी ओर, जो सबसे रेगेक्स फ्लेवर पर एक स्ट्रिंग की शुरुआत में एक शब्द से मेल खाता है (इन फ्लेवर्स में \ w \ _ के विपरीत मेल खाता है)

^\w

यदि आपके स्वाद में \ w शॉर्टकट नहीं है, तो आप उपयोग कर सकते हैं

^[a-zA-Z0-9]+

सावधान रहें कि यह दूसरा मुहावरा केवल अक्षरों और संख्याओं से मेल खाएगा, कोई प्रतीक नहीं।

यह जानने के लिए कि किस शॉर्टकट की अनुमति है और वे वास्तव में क्या मेल खाते हैं (और वे यूनिकोड के साथ कैसे व्यवहार करते हैं) जानने के लिए अपने रेगेक्स फ्लेवर मैनुअल की जाँच करें।


27
अपने उत्तर को सामान्य करने के लिए +1। मैं स्टैक ओवरफ्लो पर इसे और अधिक देखना पसंद करूंगा। मेरी राय में इसे एक बेहतर शिक्षण संसाधन बनाता है।
जिम

केस को असंवेदनशील कैसे बनाया जाए अर्थात स्टॉप या स्टॉप या sTop से मिलान किया जाए?
एल्टन गार्सिया डे सैन्टाना

आपकी भाषा पर निर्भर करता है ... पर्ल संगत मैं I संशोधक का उपयोग कर सकता है। / regex / i .NET RegexOptions.IgnoreCase और इतने पर
विन्को वर्सलोविच

मत भूलो ^stop\b, जो किसी भी सीमा को समाप्त करने की अनुमति देगा, जिसमें लाइन का अंत भी शामिल है
मैड फिजिसिस्ट

80

इसे इस्तेमाल करे:

/^stop.*$/

स्पष्टीकरण:

  • / चरक नियमित अभिव्यक्ति का परिसीमन करते हैं (यानी वे प्रति रेगेक्स का हिस्सा नहीं हैं)
  • ^ का मतलब है लाइन की शुरुआत में मैच
  • इसके बाद * का अर्थ है किसी भी वर्ण से मेल खाता है (।), किसी भी समय (*)
  • $ का मतलब लाइन के अंत तक है

यदि आप व्हॉट्सएप के बाद उस रोक को लागू करना चाहते हैं, तो आप RegEx को इस तरह संशोधित कर सकते हैं:

/^stop\s+.*$/
  • \ रों साधन किसी भी खाली स्थान के चरित्र
  • + के बाद \ _ का मतलब है कि स्टॉप वर्ड के बाद कम से कम एक व्हाट्सएप चरित्र होना चाहिए

नोट: यह भी ध्यान रखें कि ऊपर दिए गए RegEx की आवश्यकता है कि स्टॉप शब्द का पालन एक स्थान से किया जाए! तो यह एक पंक्ति से मेल नहीं खाता है जिसमें केवल शामिल हैं: स्टॉप


सभी भाषाएं रेगेक्स को सीमांकित करने के लिए फॉरवर्डलैश का उपयोग नहीं करती हैं।
JAB

1
@ कैट मेगेक्स: यही कारण है कि मैंने स्पष्टीकरण क्यों जोड़ा। यदि आपकी भाषा regex को परिसीमित करने के लिए कुछ और का उपयोग करती है, तो उचित चरित्र के साथ / बदलें
माइक दिनेस्कु

1
@ हाँ, और ऐसी अतिरेकता
MarredCheese

28

यदि आप किसी शब्द को रोकना चाहते हैं तो न केवल उस पंक्ति के प्रारंभ में, जिसका आप उपयोग कर सकते हैं: \bstop.*\b- शब्द जिसके बाद रेखा आती है

स्ट्रिंग के अंत तक शब्द

या यदि आप स्ट्रिंग के उपयोग में शब्द से मेल खाना चाहते हैं \bstop[a-zA-Z]*- केवल स्टॉप से ​​शुरू होने वाले शब्द

केवल शब्दों की शुरुआत रुकने के साथ होती है

या ^stop[a-zA-Z]*केवल शब्द के लिए स्टॉप के साथ लाइनों की शुरुआत - पहला शब्द केवल
पूरी लाइन ^stop.*- केवल स्ट्रिंग की पहली पंक्ति

और यदि आप newlines उपयोग सहित स्टॉप के साथ शुरू होने वाले प्रत्येक स्ट्रिंग का मिलान करना चाहते हैं: /^stop.*/s- मल्टीलाइन स्ट्रिंग स्टॉप से ​​शुरू हो रहा है


20

जैसे @ शरधोलनी ने कहा। यह " स्टॉप " से शुरू होने वाले हर शब्द से मेल नहीं खाएगा

। केवल अगर यह एक लाइन की शुरुआत में है जैसे " स्टॉप गोइंग "। @Waxo ने सही जवाब दिया:

यह एक थोड़ा बेहतर है, यदि आप " स्टॉप " के साथ शुरू होने वाले किसी भी शब्द से मेल खाना चाहते हैं और ए से जेड के अक्षरों के अलावा कुछ भी नहीं है ।

\bstop[a-zA-Z]*\b

यह सब मेल खाएगा

बंद करो (1)

यादृच्छिक रोकें (2)

रोक (3)

बंद करना चाहते हैं (4)

कृपया बंद करो (5)

परंतु

/^stop[a-zA-Z]*/

केवल (1) तक मैच होगा (3), लेकिन नहीं (4) और (5)


8
/stop([a-zA-Z])+/

किसी भी स्टॉप शब्द (स्टॉप, स्टॉप, स्टॉप आदि) से मेल खाएगा

हालांकि, यदि आप एक स्ट्रिंग की शुरुआत में "स्टॉप" से मेल खाना चाहते हैं

/^stop/

करेंगे: डी



1
यह स्टॉप123 या स्टॉप से ​​मेल नहीं खाएगा,।
4

7

यदि आप "स्टॉप" से शुरू होने वाली किसी भी चीज़ का मिलान करना चाहते हैं, जिसमें "स्टॉप गोइंग", "स्टॉप" और "स्टॉप" का उपयोग शामिल है:

^stop

यदि आप "स्टॉप गोइंग", "स्टॉप दिस", जैसे कुछ भी इसके बाद रोक शब्द से मेल खाना चाहते हैं , लेकिन "रोका" नहीं और "रोक" का उपयोग न करें:

^stop\W

0

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

आप पाठ को संसाधित करने के लिए कम से कम एक भोली-भाली एल्गोरिथ्म चाहते हैं (पोर्टर स्टेमर का प्रयास करें; वहां अधिकांश भाषाओं में मुफ्त कोड उपलब्ध है)। इस प्रोसेस्ड टेक्स्ट और प्रीप्रोसेड टेक्स्ट को दो अलग-अलग स्पेस-स्प्लिट एरेज़ में रखें। सुनिश्चित करें कि प्रत्येक गैर-वर्णमाला वर्ण भी इस सरणी में अपना स्वयं का सूचकांक प्राप्त करता है। जो भी शब्दों की सूची आप फ़िल्टर कर रहे हैं, उन्हें भी स्टेम करें।

अगला कदम सरणी सूचकांकों को ढूंढना होगा जो आपके स्टैंमड 'स्टॉप' शब्दों की सूची से मेल खाते हैं। असंसाधित सरणी से उन लोगों को निकालें, और फिर रिक्त स्थान पर फिर से जुड़ जाएं।

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


0

यदि आप चाहते हैं कि शब्द "स्टॉप" से शुरू हो, तो आप निम्न पैटर्न का उपयोग कर सकते हैं। "^ बंद। *"

यह किसी भी चीज़ के बाद स्टॉप से ​​शुरू होने वाले शब्दों से मेल खाएगा।


1
क्या तुम सिर्फ इस्तेमाल नहीं कर सकते थे "^stop"?
स्टीफन राउच

निर्भर करता है। जावा सिंटैक्स के संदर्भ में बात करते हुए, हम स्ट्रीग ऑब्जेक्ट के साथ regex या प्रत्यक्ष उपयोग .matches () विधि का उपयोग करने के लिए पैटर्न और मिलान ऑब्जेक्ट का उपयोग कर सकते हैं। वे नीचे के रूप में परिणाम में भिन्न हैं: code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
मनीषा चौरसिया

1
यह तभी मिलता है जब शब्द लाइन की शुरुआत में होता है। यदि "स्टॉप" से शुरू होने वाले शब्द पंक्ति के अंत में या अंत में हैं, तो यह रेग्ज मेल नहीं करेगा। @StephenRauch यदि आप [az] को छोड़ देते हैं, तो आपको "रोक" जैसा कोई शब्द नहीं मिलेगा। "रोक" के मामले में आपको "रोक" मिलता है और "पिंग" गायब हो जाएगा।
सेदट किलकिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.