2011-05-09 24 views
10

मैं एम-एक्स प्रतिस्थापन-regexp का उपयोग कर emacs (foo कहें) पर एक पूरे शब्द की सभी घटनाओं को प्रतिस्थापित करने का प्रयास कर रहा हूं।Emacs regex शब्द सीमा (विशेष रूप से अंडरस्कोर से संबंधित)

समस्या

है कि मैं इस तरह के word_foo_word के रूप में रेखांकित शब्दों में foo की घटनाओं को बदलने के लिए नहीं करना चाहती

अगर मैं का उपयोग \ bfoo \ ख foo मैच के लिए तो यह रेखांकित तार से मेल खाएगा; क्योंकि जैसा कि मैं समझता हूं कि इमैक शब्द सीमाओं का हिस्सा बनने के लिए अंडरस्कोर मानते हैं, जो कि अन्य रेगेक्स सिस्टम जैसे कि पर्ल से अलग है।

आगे बढ़ने का सही तरीका क्या होगा?

धन्यवाद

उत्तर

5

आप ने लिखा है:

के रूप में मैं समझता हूँ Emacs अंडरस्कोर समझता है शब्द सीमाओं का हिस्सा है, जो अन्य regex सिस्टम

अंडरस्कोर के उपचार, जैसे करने के लिए अलग है होना करने के लिए Emacs में सब कुछ, विन्यास योग्य है। यह प्रश्न:
How to make forward-word, backward-word, treat underscore as part of a word?

... बातचीत से पूछता है।

मुझे लगता है कि आप वाक्यविन्यास तालिका में अंडरस्कोर के सिंटैक्स को बदलकर अपनी समस्या का समाधान कर सकते हैं ताकि वे शब्दों का हिस्सा न हों और फिर खोज/प्रतिस्थापन कर सकें।

ऐसा करने के लिए, आपको उस मोड के बारे में जानने की आवश्यकता है, और उस मोड के लिए वाक्यविन्यास तालिका का नाम। सी ++ में, यह इस तरह होगा:

(modify-syntax-entry ?_ "." c++-mode-syntax-table) 

डॉट "विराम चिह्न" है, जो एक शब्द की हिस्सा नहीं निकलता है का प्रतीक है। उस पर और अधिक के लिए, पर M-x describe-function आज़माएं।

+0

सिंटैक्स टेबल धन्यवाद धन्यवाद। – nsimplex

9

regexp \<foo\> या \bfoo\b मैचों foo केवल जब यह पहले नहीं या इसके बाद एक शब्द घटक चरित्र द्वारा (आमतौर पर अक्षर या अंक syntax codew,, तो यह foo_bar में से मेल खाता है, लेकिन foo1 में नहीं)।

Emacs 22 के बाद, regexp \_<foo_bar\_> मैचों foo_bar केवल तभी जब यह प्रतीक घटक चरित्र से पहले या उसके बाद नहीं होता है। एक प्रतीक घटक या तो एक शब्द घटक या सिंटैक्स _ वाला एक चरित्र है। अधिकांश प्रोग्रामिंग मोड एक प्रतीक घटक होने के लिए _ परिभाषित करते हैं।

+0

धन्यवाद \ _ <ऑपरेटर वह है जिसे मैं ढूंढ रहा था। – nsimplex