2009-12-28 14 views
8

मैं इस तरह के प्रश्नों के लिए खोज की है का अभाव है, लेकिन सभी मामलों मैंने पाया एक समस्या विशेष ढंग से हल किया गया, का उपयोग कर की तरह! जी में vi रेगेक्स मैचों को अस्वीकार करने, या अन्य चीजों से मेल खाने के लिए, बिना किसी रेगिक्स अस्वीकृति के।Regex एक पूरी स्ट्रिंग के मिलान से ही अगर यह एक दिया स्ट्रिंग/प्रत्यय

तार का एक सेट करने के बाद मुझे लगता है कि यह केवल पत्ते (मिलान) साथ उन्हें फ़िल्टर करने के लिए रेगुलर एक्सप्रेशन मिलान इसलिए जरूरत है तार:

इस प्रकार, मैं इस के लिए एक "शुद्ध" समाधान में दिलचस्पी रखता हूँ एक दिए गए सबस्ट्रिंग की कमी। उदाहरण के लिए, में "फू" को छान:

Boo 
Foo 
Bar 
FooBar 
BooFooBar 
Baz 

परिणाम होगा में:

Boo 
Bar 
Baz 

मैं नकारात्मक नज़र Aheads/behinds (?!regex)/(?<!regex) के साथ निर्माण करने की कोशिश की है, लेकिन यह पता नहीं कर सका। क्या यह भी संभव है?

^(?:(?!Foo).)*$ 

यह एक समय में एक चरित्र का उपभोग और परीक्षण होगा अगर कोई फू आगे है:

+0

पृष्ठभूमि: phpunit में --filter तर्क है जो परीक्षण मामलों के नामों के लिए एक नियमित अभिव्यक्ति स्वीकार करता है, लेकिन इसमें एनालॉग को छोड़ना नहीं है। यही कारण है कि मुझे इस सवाल से पूछा गया है, जो phpunit कमांड लाइन तर्कों के बावजूद खुद ही दिलचस्प है। –

उत्तर

19

इस नियमित अभिव्यक्ति की कोशिश करो। एक ही एक नकारात्मक लुक-पीछे के साथ किया जा सकता है:

^(?:.(?<!Foo))*$ 

लेकिन क्या आप भी बिना आस-पास देखें दावे ही कर सकते हैं:

^(?:[^F]*|F(?:$|[^o].|o(?:$|[^o])))*$ 

यह एफ या एक को छोड़कर किसी भी चरित्र से मेल खाता है एफ या तो o या उसके बाद o के बाद कोई अन्य o नहीं है।

+1

साफ (15 वर्ण) –

+0

दूसरा क्या है?^में (? :(?! फू)।) * $ करो? – gameover

+0

इसे इसका हिस्सा मिला: (? gameover

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