2012-08-05 11 views
353

में नियमित अभिव्यक्ति खोज प्रतिस्थापन मैं सब्लिमे टेक्स्ट 2 में नियमित अभिव्यक्तियों के साथ खोज करने की तलाश में हूं। documentation on this बल्कि एनीमिक है। विशेष रूप से, मैं क्या करना चाहते हैं समूहों पर इस पाठ को परिवर्तित करने की तरह कुछ एक की जगह है, तो:सब्लिमे टेक्स्ट 2

Hello my name is bob

और इस खोज पद:

क्या ढूँढ़े: my name used to be $(1)

: my name is (\w)+

के साथ बदलें

खोज शब्द ठीक काम करता है लेकिन मैं वास्तव में regexp समूह का उपयोग करके प्रतिस्थापन करने का कोई तरीका नहीं समझ सकता।

उत्तर

469

आमतौर पर पहले कैप्चर समूह (कोष्ठक में पैटर्न का पहला मिलान) के लिए $1 या \1 (बैकस्लैश एक) का बैक-रेफरेंस होता है। तो हो सकता है की कोशिश:

my name used to be \1 

या

my name used to be $1 

अद्यतन: के रूप में कई लोगों ने बताया है, अपने मूल कब्जा पैटर्न गलत है और केवल बजाय नाम के अंतिम अक्षर पर कब्जा पूरा नाम ढूँढें हिस्सा

Hello, my name is bob 

:

के लिए: ऊपर सवाल में

my name is (\w+) 
+40

इन दोनों उदात्त पाठ में काम करेंगे। – furq

+12

को छोड़कर, क्या यह '0 0' नहीं है? –

+8

नहीं, $ 0 को नियमित अभिव्यक्ति में बैक-रेफरेंस के रूप में उपयोग नहीं किया जाता है (क्योंकि '\ 0' शून्य वर्ण के बराबर होता है, और '\ 0ddd' को कोड बिंदु ddd वाले वर्ण के लिए भागने के रूप में उपयोग किया जाता है)। हालांकि, इस पृष्ठ के अनुसार "$ 0' का उपयोग" सबमिटाइम 2 "के रूप में" निकास चिह्न "के रूप में किया जाता है (https://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/snippets.html ? हाइलाइट = $ 0) (हालांकि मुझे पर्याप्त उदाहरण खोजने में परेशानी हो रही है कि कैसे Sublime2 में निकास चिह्न का उपयोग किया जाता है)। – Bobulous

92

वैसे,: आप नाम के अक्षरों के सभी पर कब्जा करने के निम्नलिखित पैटर्न का उपयोग करना चाहिए

my name is (\w)+ 

प्रतिस्थापित भाग के साथ:

my name used to be \1 

वापसी होगी: करने के लिए हिस्सा लगता है

Hello, my name used to be b 

बदलें:

my name is (\w+) 

और की जगह आप क्या उम्मीद हो जाएगा:

Hello, my name used to be bob 

जबकि (\ डब्ल्यू) + मिलान कर देंगे "बॉब", यह वह समूह नहीं है जिसे आप प्रतिस्थापन के लिए चाहते हैं।

37

उपयोग करें() अपने खोज स्ट्रिंग

पर जोर देना एक महत्वपूर्ण चीज नहीं है में कोष्ठकों!अपनी खोज को स्ट्रिंग के सभी मिलान किया क्षेत्रों है कि आप अपने प्रतिस्थापन स्ट्रिंग में उपयोग करना चाहते हैं द्वारा अपनाया होना चाहिए() कोष्ठकों, अन्यथा इन मिलान किया क्षेत्रों में इस तरह के $ 1, $ 2 के रूप में चर के साथ पहुंच योग्य नहीं होगा, .. .nor \ 1 \ 2, .. और आदि

उदाहरण:

हम 'पिक्सल' के साथ उन्हें 'की जगह ले लेकिन संख्या मूल्यों को संरक्षित करना चाहते:

margin: 10em 
margin: 2em 

तो हम का उपयोग margin: $1px ए प्रतिस्थापन स्ट्रिंग है।


सही: निम्नलिखित के रूप में () कोष्ठकों द्वारा वांछित $1 मिलान किया खंड गले:

खोजें: margin: ([0-9]*)em (कोष्ठकों के साथ)

REPLACE के लिए: margin: $1px

परिणाम:

margin: 10px 
margin: 2px 

गलत: निम्नलिखित regex पैटर्न वांछित लाइनों से मेल खाएगी लेकिन मिलान किया क्षेत्रों में इस तरह के $1 के रूप में चर के रूप में प्रतिस्थापित स्ट्रिंग में उपलब्ध नहीं होगा:

खोजें: margin: [0-9]*em (कोष्ठकों के बिना)

की जगह: margin: $1px

परिणाम: ($1 अपरिभाषित है)

margin: px 
margin: px 
+1

धन्यवाद, यह उत्तर वास्तव में एक दिलचस्प तथ्य बताता है जिसने मेरी समस्या का समाधान किया। – Enkk

15

ध्यान दें कि यदि आप 9 से अधिक कैप्चर समूहों का उपयोग करते हैं तो आपको सिंटैक्स ${10} का उपयोग करना होगा।

$10 या \10 या \{10}नहीं कार्य नहीं करेगा।

22

यहां स्वीकृत उत्तर की एक दृश्य प्रस्तुति है।

enter image description here

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