न्यूलाइन वर्ण से मिलान करने के लिए regex क्या है?


22

Emacs regex में, \nएक नई पंक्ति वर्ण से मेल नहीं खाता \n

  1. क्या मैं सही हूं $जो नई लाइन के चरित्र और नई लाइन के चरित्र के ठीक पहले के बीच की स्थिति से मेल खाता है। एक स्ट्रिंग के लिए abc\n, के $बीच स्थिति से मेल खाता है cऔर \n?
  2. माचिस क्या है \n?

2
क्या आप एक न्यूनतम कार्य उदाहरण प्रदान कर सकते हैं? शायद मुझे कुछ याद आ रहा है, लेकिन (re-search-forward "\n")मेरे लिए ठीक काम करता है।
दान

1
आपकी फ़ाइल नई लाइनों के लिए \ r \ n का उपयोग कर सकती है और यह हो सकता है कि आपको अपने regexp में \ r को शामिल करने की आवश्यकता है, इसलिए abc\r\nइसके बजाय abc\n
जॉर्डन बायोनडो

@Dan: मुख्यमंत्रियों और MX दोनों मैच होते हैं \nकरने के लिए n। मेरा बफर फंडामेंटल मोड में है। यह किसी भी पाठ के साथ होता है, इसलिए नई पंक्ति या अक्षर nवाला कोई भी पाठ काम करने का एक उदाहरण है
St'Exchange for All

@Jordon: मुख्यमंत्रियों और MX दोनों मैच होते हैं \r\nकरने के लिएrn
सभी के लिए StackExchange

@ टिम, हाँ क्योंकि अगर आप उन्हें अंतःक्रियात्मक रूप से दर्ज कर रहे हैं तो आपको क्रमशः एक उद्धृत आवेषण, Cq Cm और Cq Cj करने की आवश्यकता होगी। यदि आप उन्हें एक लिस्प स्ट्रिंग में दर्ज कर रहे थे तो आप \ r \ n दर्ज कर सकते थे।
जॉर्डन बियोनडो

जवाबों:


19
  1. हाँ। लाइन$ के अंत से मेल खाता है , न कि नई लाइन का चरित्र जो लाइन के अंत के बाद आता है।
  2. करते हैं C-M-s C-q C-jC-qके लिए डिफ़ॉल्ट बाइंडिंग है quoted-insertऔर मिनीबफ़र में भी काम करता है। यह अभिव्यक्ति शाब्दिक रूप से एक नई पंक्ति की खोज करती है C-j:।

1
2. क्या आप कह रहे हैं कि नई लाइन कैरेक्टर को एमाक्स रेगेक्स में एस्केप सीक्वेंस के रूप में नहीं दिखाया जा सकता है?
स्टैकएक्सचेंज फॉर ऑल

3
चाहे एक नई रेखा के लिए अंतःक्रियात्मक रूप से खोज की जाए या (जैसे (looking-at "^J")कि जहाँ ^ J द्वारा डाला जाए C-q C-j), C-q C-jदृष्टिकोण हमेशा काम करता है। लेकिन जब एक ही looking-at \nकाम की तरह भी विशिष्ट कार्यों का उपयोग कर ; M-: (looking-at "\n") RETयदि कर्सर लाइन के अंत में है (और उसके बाद एक नई रेखा है) तो यह सच हो जाएगा।
कौशल मोदी

2
सिर्फ उल्लेख करने के लिए, यदि regexp-builderआप उपयोग कर रहे हैं, तो आप एक नई लाइन को पहचान सकते हैं [\n]
न्सुकामी _

@Nsukami_: मुख्यमंत्रियों और MX दोनों मैच होते हैं [\n]करने के लिए n
सभी

13

डैन की टिप्पणियों के अनुसार, एक नई रेखा से मेल खाने वाला रेगेक्स एक नई रेखा है

आप के रूप में एक उद्धृत स्ट्रिंग में एक नई पंक्ति का प्रतिनिधित्व कर सकते हैं "\n"। इसके लिए कोई विशेष अतिरिक्त रेगेक्स-विशिष्ट सिंटैक्स नहीं है - आप बस एक नई रेखा का उपयोग करते हैं, बिल्कुल किसी अन्य शाब्दिक चरित्र की तरह।

यदि आप अंतःक्रियात्मक रूप से एक regexp में प्रवेश कर रहे हैं, तो आप नई लाइन सम्मिलित कर सकते हैं C-qC-j, जैसा कि कौशलमोडी का उत्तर बताता है।


1
धन्यवाद! Emacs में (क्विक में नहीं), क्या CK C एक नई लाइन कैरेक्टर से मैच करने का एकमात्र तरीका है? \nएक नई पंक्ति वर्ण से मेल नहीं खाता।
सभी

1
हाँ। खैर, अधिक विशेष रूप से, एक newline टाइप करना एक नई पंक्ति वर्ण से मेल खाने का एकमात्र तरीका है जब एक regexp को अंतःक्रियात्मक रूप से दर्ज किया जाता है (क्योंकि एक newline के लिए कोई regexp एस्केप अनुक्रम नहीं है), और C-q C-jएक प्रॉम्प्ट पर एक newline टाइप करने के लिए सबसे विश्वसनीय तरीका है।
फिल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.