2010-01-15 12 views
9

चलो कहते हैं कि मैं निम्नलिखित स्ट्रिंग करते हैं:रेगेक्स केवल पहली घटना के लिए?

इस परीक्षण के लिए एक परीक्षण है। यह केवल जांच है। समाप्त।

और मैं this is a test और this is only a test चुनना चाहता हूं। मुझे दुनिया में क्या करने की ज़रूरत है?

निम्नलिखित Regex मैंने कोशिश की एक नासमझ परिणाम पैदावार:

this(.*)test

रिटर्न this is a test for the sake of testing. this is only a test

यह इस तरह लगता है (मैं भी कब्जा करने के लिए क्या यह के बीच था चाहता था) शायद कुछ आसान रहा है ' मैं भूल रहा हूँ।

उत्तर

25

रेगेक्स लालची है जिसका अर्थ है कि यह कई पात्रों को कैप्चर करेगा क्योंकि यह .* मैच में हो सकता है। यह गैर लालची कोशिश करने के लिए:

this(.*?)test

? संशोधक यह मैच में संभव के रूप में कुछ वर्ण पर कब्जा कर देगा।

+0

धन्यवाद ... यही मैंने सोचा था। मैंने एक रेगेक्स परीक्षक पर परीक्षण किया और यह काम करता है। तो ऐप (एडिटप्लस) मैं कुछ खोजने और जादू को प्रतिस्थापित करने के लिए उपयोग कर रहा हूं जाहिर है? परिमाणक। –

+0

मेरे उत्तर के अनुसार, यदि आपको "यह" और "परीक्षण" दूसरे शब्दों में एम्बेड किए गए हैं तो आपको सही परिणाम नहीं मिलेंगे। इसे देखने पर विचार करें, अगर यह एक मुद्दा हो सकता है। –

3

* एक लालची क्वांटिफायर है। इसका मतलब है कि यह जितना संभव हो सके मेल खाता है, यानी आप जो देख रहे हैं। रेगेक्स के लिए विशिष्ट भाषा समर्थन के आधार पर, आपको एक गैर लालची क्वांटिफायर खोजने की आवश्यकता होगी। आम तौर पर यह एक पिछला प्रश्न चिह्न है, जैसे: *?। इसका मतलब यह है कि जैसे ही शेष रेगेक्स संतुष्ट हो सकता है, यह अक्षरों को खपत करना बंद कर देगा।

There is a good explanation of greediness here.

8

एंडी ई और Ipsquiggle सही विचार है, लेकिन मैं कहना है कि आप एक शब्द सीमा अभिकथन जोड़ सकते हैं चाहते हैं, जिसका अर्थ है आप शब्दों है कि "इस" से निपटने के लिए नहीं करना चाहते हैं या उनमें "परीक्षण" - केवल खुद के द्वारा शब्द। पर्ल में और इसी तरह "\ b" मार्कर के साथ किया जाता है।

जैसा कि है, this(.*?)test "थिसल सबसे महान हैं" से मेल खाता है, जो आप शायद नहीं चाहते हैं। \bthis\b(.*?)\btest\b

+0

+1, निश्चित रूप से कुछ के बारे में सोचने लायक है –

संबंधित मुद्दे