बहुभाषी टैग का पता लगाने के लिए उदात्त पाठ regex नहीं


130

मैं यहाँ इस regex है;

\[sometag\](.*)\[/sometag\]

जिसे [sometag]टैग से घिरे टेक्स्ट को पकड़ना है । यह इन टैग्स में निहित सिंगल लाइन जानकारी के लिए काम करता है, जैसे स्ट्रिंग पर [sometag]this is a bit of text[/sometag]। लेकिन यह पाठ पर काम नहीं करता है, जो कई लाइनों को फैलाता है, जैसे;

[sometag] here is more text

it spans more than one line [/sometag]

किसी कारण से, उदात्त पाठ का रेगेक्स खोजक कई पंक्तियों में टैग को नहीं पहचान पाएगा। मैं जानना चाहता हूं कि क्या यह सब्लिम टेक्स्ट, एक टॉगल करने योग्य विकल्प, या सिर्फ मेरी व्यक्तिगत अक्षमता के साथ एक समस्या है।

जवाबों:


240

प्रारंभ में, डॉटलाइन संशोधक (?s)का उपयोग करके डॉट को मेल करने के लिए भी नईलाइन वर्णों का उपयोग करें।

(?s)\[sometag\](.*?)\[\/sometag\]

डेमो


धन्यवाद! मुझे उन अतिरिक्त प्रश्न चिह्नों को शामिल क्यों करना है?
मॉर्डेक

8
?बाद *एक गैर-लालची मैच करेगा। [b]foo[/b]foo[b]bar[/b]उदाहरण के रूप में विचार करें । \[b\].*\[\/b\]शुरुआती बी से अंतिम समापन बी तक पूरे मैच होगा।
अविनाश राज


11
(एस) के कारण डॉट्स में भी नई
धाराएँ

3
तारांकन के बाद प्रश्न चिह्न महत्वपूर्ण है क्योंकि यह मैच को गैर-लालची के रूप में परिभाषित करता है।
andrej

12

यदि कुछ कारणों से डॉट के मोड को संशोधित करना अनुचित है, तो आप इसे ले सकते हैं:

[sometag](.|\n)+?[/sometag]

3
(.|\n)+?यदि आपके पास DOTALL संशोधक की पहुंच है तो कभी भी उपयोग न करें । यदि आप (?s)कुछ फालोअर में उपयोग नहीं कर सकते हैं , तो [\s\S]/ [\d\D]/ का उपयोग करें [\w\W], लेकिन यहां सुझाए गए वैकल्पिक गश्त का नहीं। यह पैटर्न अत्यधिक अक्षम है और आसानी से टाइमआउट मुद्दे को जन्म दे सकता है।
विकटोरिया स्ट्राइब्यू

1
@ WiktorStribiżew: क्या आप बता सकते हैं कि यह अक्षम क्यों है? मैं हमेशा उपयोग करता हूं [\s\S], लेकिन एक नज़र में (.|\n)समान प्रतीत होता है? यह मिलान समूहों के साथ क्या करना है? लेकिन फिर (?:.|\n)वही होगा?
सेर्बस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.