मेरे पास रुबी में नियमित अभिव्यक्ति है जो मल्टीलाइन मोड में ठीक से काम नहीं कर रही है।रूबी में इस मल्टीलाइन नियमित अभिव्यक्ति को कैसे ठीक किया जाए?
मैं मार्कडाउन टेक्स्ट को Redmine में उपयोग किए जाने वाले वस्त्र-ईक मार्कअप में कनवर्ट करने का प्रयास कर रहा हूं। समस्या कोड ब्लॉक को बदलने के लिए मेरी नियमित अभिव्यक्ति में समस्या है। इसे 4 रिक्त स्थान या टैब के साथ किसी भी लाइन को ढूंढना चाहिए, फिर उन्हें पूर्व टैग में लपेटें।
markdownText = '# header
some text that precedes code
var foo = 9;
var fn = function() {}
fn();
some post text'
puts markdownText.gsub!(/(^(?:\s{4}|\t).*?$)+/m,"<pre>\n\\1\n</pre>")
इच्छित परिणाम:
# header
some text that precedes code
<pre>
var foo = 9;
var fn = function() {}
fn();
</pre>
some post text
समस्या यह है कि समापन पूर्व टैग दस्तावेज़ के अंत में के बजाय के बाद छपा है कि "fn();"। मैं निम्नलिखित अभिव्यक्ति की कुछ विविधताओं की कोशिश की लेकिन यह मेल नहीं खाता:
gsub!(/(^(?:\s{4}|\t).*?$)+^(\S)/m, "<pre>\n\\1\n</pre>\\2")
मैं कैसे नियमित अभिव्यक्ति बस दांतेदार कोड ब्लॉक मैच के लिए मिलता है? आप रूबलर here पर इस नियमित अभिव्यक्ति का परीक्षण कर सकते हैं।
क्यों अपने regex में नई पंक्ति शामिल नहीं: '((:।? \ रों {4} | \ t) * \ N) +' –
छोड़कर एक्सएचटीएमएल संयमी [रेगुलर एक्सप्रेशन से मेल खुला टैग की संभावित डुप्लिकेट टैग] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –
@Mladen Jablanovic मुझे इस कोड का उपयोग करके काम करने के लिए आपका उदाहरण नहीं मिल सका: 'markdownText.gsub डालता है! (/ ((?: \ s {4} | \ t)। *? \ n) + /,"
")'। '\ N'' '' से अलग तरीके से व्यवहार कैसे करेगा? – DonovanChan