2009-05-18 15 views
9

शामिल न हो मिलान के लिए Regex मैं निम्नलिखित लाइनों:लाइनों है कि एक शब्द

Message:Polarion commit Mon May 18 06:59:37 CEST 2009 
Message:Polarion commit Fri May 15 19:39:45 CEST 2009 
Message:424-18: use new variable 
Message:Polarion commit Fri May 15 19:29:10 CEST 2009 
Message:Polarion commit Fri May 15 19:27:23 CEST 2009 
Message:000-00: do something else 
Message:Polarion commit Fri May 15 17:50:30 CEST 2009 
Message:401-103: added application part 
Message:Polarion commit Fri May 15 17:48:46 CEST 2009 
Message:Polarion commit Fri May 15 17:42:04 CEST 2009 

और मैं "Polarion"

कैसे मैं यह नहीं होता युक्त नहीं सभी लाइनों प्राप्त करना चाहते हैं?

पुनश्च: मैंने देखा: Regex to match against something that is not a specific substring लेकिन यह मेरी मदद नहीं करता है

पी पी एस: मैं संदेशों लॉग ऑन चयन करने के लिए TortoiseSVN में यह करने के लिए कोशिश कर रहा हूँ, और मुझे लगता है कि वहाँ "नकारात्मक lookbehind साथ एक समस्या है "

+0

उचित प्रारूपण सुनिश्चित करने के लिए कृपया चार रिक्त स्थान के साथ कोड कोड और उदाहरण सादे पाठ फ़ाइलों को इंडेंट करें। आप पाठ का चयन करके और ctrl-k दबाकर ऐसा कर सकते हैं। चीयर्स। – Stephan202

+0

सभी रेगेक्स इंजन नकारात्मक दिखने का समर्थन नहीं करते हैं - TortoiseSVN सबसे अधिक संभावना है जो नहीं करता है। –

उत्तर

9

यदि आप अपनी नियमित अभिव्यक्ति को उस चीज़ से मेल खाते हैं जो आप ढूंढ रहे हैं और फिर परिणामों को उलट दें तो यह आसान हो सकता है।

उदहारण के लिए:

अधिकांश Regex का उपयोग करके उपकरण आम तौर पर वी ईआरटी में (केस मैं nsensitive के लिए मैं रखने) के लिए विकल्प 'वी' बुला, आप खोज परिणामों को उल्टा करने के लिए अनुमति देते हैं

grep -v <search> 
find /v <search> 

आदि

+0

हम्म, पहला बोल्ड टेक्स्ट, वी इनवर्ट इन पूर्वावलोकन में ठीक दिखता है लेकिन यहां गलत लगता है ... –

+0

तारों का उपयोग किसी शब्द के अंदर नहीं किया जाना चाहिए, लेकिन ... काम करना चाहिए। यह पहली बार नहीं है जब मैंने पूर्वावलोकन फलक को फर्जी परिणाम दिए हैं। –

+0

+1, यह वही है जो मैं – Claudiu

19

इस expresion काम करेगा।

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

यह कहने देगी कि स्ट्रिंग "Polarion" शामिल नहीं है एक शून्य चौड़ाई नकारात्मक lookbehind अभिकथन उपयोग करता है।

 
    ^    Anchor to start of string 
    (?:    Non-capturing group 
     .    Match any character 
     (?<!Polarion) Zero-width negative lookbehind assertion - text to the 
         left of the current position must not be "Polarion" 
    ) 
    *     Zero or more times 
    $     Anchor to end of string 

निम्न संस्करण केवल 'एन' के बाद ही दावा करेगा - शायद यह तेज़, शायद धीमा हो जाएगा।

^(?:[^n]*|n(?<!Polarion))*$ 
+1

के लिए देख रहा था दिलचस्प जवाब, लेकिन grep -v बहुत आसान है। –

+0

वाह ने मुझे अन्य पाठ संपादकों और जावा के साथ मदद की :-)। धन्यवाद। –

+0

नोटपैड ++ – BurnsBA

0

मैं क्या regex इंजन TortoiseSVN उपयोग कर रहा है के बारे में कोई जानकारी नहीं मिली है, लेकिन आप mailing list पर पूछ सकते हैं। सभी इंजन शून्य-चौड़ाई नकारात्मक लुक-बैक जैसी उन्नत सुविधाओं का समर्थन नहीं करते हैं।

3

यहाँ एक समाधान एक नकारात्मक अग्रदर्शी का उपयोग कर, जो और अधिक व्यापक रूप से एक lookbehind से समर्थित है है:

^Message:(?!Polarion).*$ 

(इसके अतिरिक्त, क्योंकि हम जानते हैं कि जहां Polarion प्रकट हो सकता है, हम व्यर्थ में से कोई कार्य करने की जरूरत नहीं । फैंसी सामान डैनियल सुझाव) ऊपर अभिव्यक्ति की


स्पष्टीकरण, regex टिप्पणी के रूप में, यह है:

(?x)  # Enable comments 
^   # Start of string (start of line in multiline mode) 
Message: # Literal text 
(?!  # Begin negative lookahead 
Polarion # Literal text 
)   # End negative lookahead 
.*   # Greedily match any number of any character 
$   # End of string (end of line in multiline mode) 
0

इसने मेरे लिए काम किया है और प्रवेश करने के लिए जल्दी है (एक खोज संवाद बॉक्स में या जैसा): ^(?!.*not this).*but this

+0

में बहुत अच्छा काम करता है आप कुछ काम उदाहरण दिखा सकते हैं –

0

this answer दिखाता है, TortoiseSVN का खोज बॉक्स नियमित अभिव्यक्तियों तक सीमित नहीं है। विशेष रूप से, यदि !() में एक अभिव्यक्ति संलग्न है, तो इसे अस्वीकार कर दिया जाता है और परिणामस्वरूप गैर मेल खाने वाली रेखाएं दिखाई देती हैं। ! संलग्न अभिव्यक्ति (नियमित या नहीं) को अस्वीकार करता है।

अपने मामले के लिए,

!(Polarion) 

चाल करना चाहिए।

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