2012-08-15 23 views
30

मैंने उन शब्दों के छोटे संस्करणों के साथ विशिष्ट शब्दों को प्रतिस्थापित करने के लिए नियमित अभिव्यक्ति के साथ नोटपैड ++ खोज/प्रतिस्थापन का उपयोग करने का प्रयास किया है।

: और एक ही शब्द शून्य से खत्म होने वाली r साथ मिलान शब्दों को बदलने के लिए, एक backreference का उपयोग कर -


मैं हर शब्द है कि (एक शब्द के रूप में नहीं बल्कि er) के साथ समाप्त होता है er मैच के लिए निम्नलिखित regex इस्तेमाल किया

Find what:([a-zA-z]+e)r

Replace with:$1

लेकिन यह मेल खाने वाले शब्दों को प्रतिस्थापित नहीं करता है, भले ही यह उन्हें पाता है।

हालांकि, अगर मैं इस के लिए backreference वाक्य रचना बदलने के लिए:

Replace with:\1

सब कुछ ठीक काम करता है।


$1 बैकरेफर काम क्यों नहीं करता है?

बैकफ्रेंस - \1 और $1 के दो रूपों के बीच क्या अंतर है?

उत्तर

32

नोटपैड ++ के पुराने संस्करण (v5.9.8 और पूर्व) केवल मानक POSIX नियमित अभिव्यक्तियों का समर्थन करते हैं। हालांकि, पूर्ण PCRE (पर्ल कम्पैटिबल नियमित अभिव्यक्ति) खोज/समर्थन बदलें संस्करण 6.0 में जोड़ा गया:

New features and enhancement in Notepad++ 6.0:

  • PCRE (पर्ल कम्पैटिबल रेग्युलर एक्सप्रेशंस) समर्थित है।

इसका मतलब यह है कि आप (जैसे v6.1.5) उपयोग कर रहे हैं Notepad ++ v6.0 या किसी नए संस्करण, आप PCRE सिंटैक्स का उपयोग कर सकते हैं और backreference के लिए $1 बजाय \1 उपयोग करते हैं, लेकिन यह जीता नोटपैड ++ (संस्करण 6.0 से पहले) के पुराने संस्करणों के साथ संगत नहीं होगा। इसके अलावा, वे समान हैं।

बैकरेफर वाक्यविन्यास और नए वाक्यविन्यास समर्थन के कारणों के बीच अंतर के बारे में अधिक जानकारी के लिए, Backreferences syntax in replacement strings (why dollar sign?) देखें।

नोटपैड ++ में नियमित अभिव्यक्तियों का उपयोग करने के तरीके पर एक उपयोगी ट्यूटोरियल here पाया जा सकता है।

+3

@amiregelz मैं कई वर्षों से नोटपैड ++ का उपयोग कर रहा हूं (और प्यार कर रहा हूं), लेकिन इसके साथ सबसे बड़ी निराशाओं में से एक इसके खराब रेगेक्स समर्थन रहा है।मुझे विश्वास नहीं है कि मैं इन वर्षों में इन वर्षों में अंधेरे में रहा हूं। मानक बैक-रेफरेंस, शून्य चौड़ाई के दावे - यह सुंदर है! मेरी आंखें खोलने के लिए धन्यवाद! –