/ /। * शब्द सीमा से पहले वर्ण से मेल नहीं खाता - c #, regex, .net-4.5

। *? शब्द सीमा से पहले चरित्र से मेल नहीं खाता - सी #, regex, .net-4.5

मुझे यह समझने में कठिन समय है कि क्यों ((?i)bb.*?b) रिटर्न b और नहीं b- स्ट्रिंग के लिए a b- c। मैंने भी कोशिश की ((?i)bbw*b), लेकिन यह किसी भी बेहतर काम नहीं करता है।

कुछ और जानकारी:

मुझे एक पाठ में शब्दों से मेल खाना चाहिए। मुझे पत्र के साथ शुरू होने वाले सभी शब्दों को पुनः प्राप्त करने की आवश्यकता है b। और "शब्द" का अर्थ है बहुत अधिक किसी भी वर्ण स्ट्रिंग से शुरू होता है b, जैसे कि b, b-, b", b" आदि "शब्द" जो मुझे मेल करने की आवश्यकता है वे निश्चित रूप से एक स्थान के साथ सीमित नहीं हैं जैसे कि उदाहरण में।

उत्तर:

उत्तर № 1 के लिए 1

यह आपको वांछित परिणाम देना चाहिए:

(b.*?)(?:s|$)

मैंने इसे परखा a b- c bfdf b32=" dfa b. b---s asd b.

ऐसा लगता है जैसे आप खोज नहीं रहे हैं शब्द लेकिन किसी भी स्ट्रिंग को एक अक्षर "बी" से शुरू करके एक स्थान (या अन्य?) वर्ण (ओं) द्वारा सीमांकित किया जाता है। आपका मूल पैटर्न "t काम कर सकता है क्योंकि" - "doesn" t किसी शब्द के भाग के रूप में योग्य नहीं है। सौभाग्य।

नोट: उपरोक्त पैटर्न बहुत सरल है, $ के साथ अंतिम भाग ऐसा है कि अंतिम "बी" पर कब्जा कर लिया गया है जो लाइन के अंत में है।


उत्तर № 2 के लिए 1

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

एक क्वांटिफायर "आलसी" बनाने के लिए, आप एक प्रश्न चिह्न जोड़ते हैं: *?, +?, ??, आदि।

अब, जवाब का अगला भाग कैसे है शब्द सीमाएँ काम। शब्द सीमाएँ एक से मेल खाएँगी पद जहां "शब्द वर्ण" (0-9, ए-जेड और _) और "गैर-शब्द अक्षर" के बीच एक "ब्रेक" है। - एक गैर-शब्द चरित्र है, इसलिए इसके बीच के स्थान b-, -c तथा c सभी काम करेंगे।

क्योंकि आपको एक आलसी मात्रा मिली हुई है और उसके तुरंत बाद एक शब्द सीमा है b, वह सब जो आपके regex से मेल खाएगा।

अपने शब्द के अंत को खोजने के लिए एक शब्द सीमा का उपयोग करने की कोशिश करने के बजाय, बस शब्द वर्ण और डैश से मेल खाते हैं, जैसे कि, जो स्वाभाविक रूप से शब्द के "अंत" के लिए सब कुछ मेल खाएगा:

bb[-w]*

देखना एक कामकाजी उदाहरण


जवाब के लिए 0 № 3

.*? न्यूनतम है, इसलिए b.*?b के बाद पहला शब्द सीमा पाता है b। जबसे b एक शब्द चरित्र है, और - यह नहीं है, कि पहले शब्द सीमा उन पात्रों के बीच है।

ईटीए: थिंग है, रेगेक्सेन डॉन "टी" अपने "शब्दों" को शब्द मानते हैं, इसलिए b उनके लिए "टी वर्क" जीता। आप कहते हैं कि आपके "शब्द" डॉन "टी हमेशा एक स्पेस के साथ समाप्त होते हैं। और, स्पष्ट रूप से, उन्होंने "एक हाइफ़न के साथ टी एंड जीता। कैसे, और अधिक सटीक रूप से वे समाप्त होते हैं?"