2010-10-22 19 views
12

मैं <% और% के बीच पाठ के सभी पाठ & ब्लॉकों पर कब्जा करना चाहते हैं> सहित दो वर्णों के बीच सब कुछ पर कब्जा होगा।RegEx अभिव्यक्ति है कि बहु-ब्लॉक

उदाहरण के लिए:

<html> 
<head> 
<title>Title Here</title> 
</head> 
<body> 
<% include("/path/to/include") %> 
<h1>Test Template</h1> 
<p>Variable: <% print(second_var) %></p> 
<% 

variable = value; 

foreach(params here) 
{ 
    code here 
} 

%> 
<p><a href="/" title="Home">Home</a></p> 
</body> 
</html> 

मैं \<\%(.*)\%\> की कोशिश की है लेकिन यह है कि रूप में अच्छी तरह <h1>Test Template</h1> ब्लॉक सहित सब कुछ पर कब्जा होगा।

+2

कृपया, [regexen के साथ HTML पार्स नहीं है] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)! –

उत्तर

34

कौन सा regex इंजन आप प्रयोग कर रहे हैं?

<%(.*?)%> 

"डॉट मैचों न्यूलाइन" विकल्प सक्षम के साथ काम करना चाहिए। आपको लगता है कि स्थापित करने के लिए कैसे पता नहीं है, से बचने के लिए

<%([\s\S]*?)%> 

या

(?s)<%(.*?)%> 

कोई ज़रूरत नहीं की कोशिश <, %, या > माध्यम से।

2

मैं माइक्रोसॉफ्ट के रेगेक्स इंजन (आईई में जेस्क्रिप्ट द्वारा प्रदान किया गया) का उपयोग कर रहा हूं और इसमें 'बहु-रेखा' स्विच है जो . के व्यवहार को प्रभावित करता है, लेकिन फिर भी मुझे समस्याएं हैं जिन्हें मुझे [\u0000-\uFFFF] का उपयोग करके हल करना पड़ा जो मेल खाता सब कुछ EOL के या किसी नियंत्रण वर्ण सहित ...

तो एक <%([\u0000-\uFFFF]*?)%>

+0

बहु ('m') संशोधक' .' के व्यवहार को प्रभावित नहीं करता है। यह सिंगल-लाइन (डॉटल, 'एस') संशोधक है जो ऐसा करता है, लेकिन जावास्क्रिप्ट इसका समर्थन नहीं करता है। के रूप में @Tim उसके जवाब में प्रदर्शन जावास्क्रिप्ट में कुछ भी-सहित-नई-पंक्तियों से मेल खाते के लिए सबसे आम मुहावरा, 'है [\ s \ एस]'। –

6

\<\%(.*?)\%\> के साथ जाने के लिए है। गैर-लालची पैटर्न मिलान करने के लिए आपको .*? का उपयोग करने की आवश्यकता है।

संपादित बहु समस्या को हल करने के लिए, के रूप में यह न्यू लाइन के अलावा सब कुछ मेल खाता है आप, . वाइल्डकार्ड का उपयोग नहीं कर सकते। यह विकल्प आपके नियमित अभिव्यक्ति इंजन के आधार पर भिन्न होता है। इसलिए, मैं आपको बता सकता हूं कि अगर आप मुझे अपना रेगेक्स इंजन बताते हैं तो क्या करना है।

+0

कुछ regex इंजन ले '\ <' word_ की _beginning और के लिए '\>' word_ –

+0

की _end के लिए @Stijn: उस मामले में, तुम बस बच सकते हैं \ < and \> –

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