कुछ मिलान के लिए regex अगर यह कुछ और से पहले नहीं है


164

तो जावा में regex के साथ, मैं एक regex लिखना चाहता हूं जो कि तभी और अगर कुछ वर्णों से पैटर्न से पहले नहीं है, तो मेल खाएगा। उदाहरण के लिए:

String s = "foobar barbar beachbar crowbar bar ";

मैं मैच करना चाहता हूं यदि बार फू से पहले नहीं है। तो उत्पादन होगा:

barbar
beachbar
crowbar
bar

मुझे पता है कि यह एक बहुत ही सरल प्रश्न है। मैं रेगेक्स सीखने की कोशिश कर रहा हूं, लेकिन इस बीच मुझे अब काम करने के लिए कुछ चाहिए।

जवाबों:


277

आप negative lookbehindइस तरह का उपयोग करना चाहते हैं :

\w*(?<!foo)bar

जहां (?<!x)"केवल इस बिंदु से पहले" x "नहीं होने पर" का अर्थ है।

नियमित अभिव्यक्तियाँ देखें - अधिक जानकारी के लिए लुकअप

संपादित करें : \w*पात्रों को पकड़ने से पहले जोड़ा गया (उदाहरण के लिए "समुद्र तट")।


2
foo_arbiteath_bar से मेल न खाने के लिए किन संशोधनों की आवश्यकता है? यानी फू तुरंत नहीं पूर्ववर्ती बार
ब्रैड केंट

1
@ ब्रैडकंट (?<!foo).*barकुछ इस तरह मैच करेगा, मुझे विश्वास है।
एमिलर

@ शत्रु नाच। यह फ़ोबोबज़ार से मेल खाएगा (फू फ़ोबाज़बर से पहले नहीं आता है, इसलिए यह मेल खाता है)
ब्रैड केंट

2
@BradKent मैंने आपके "नहीं" को "मैच नहीं" में पढ़ा, इसीलिए मैंने कहा कि यह मैच होगा। आप मामला \b(?!foo)\w*bar\bमेरे लिए एक तरह लग रहा है ।
एमिलर

4
@BradKent तब आप या तो एक नया प्रश्न पूछ सकते हैं, जो आप विस्तार से प्राप्त करने की कोशिश कर रहे हैं, या जब तक आप स्वयं इसे नहीं ढूंढते, तब तक नियमित अभिव्यक्तियों के साथ खेलना जारी रखें। :)
एमिलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.