2010-03-01 11 views
19

के बीच कुछ भी स्क्वायर ब्रैकेट और ब्रैकेट्स के बीच से टेक्स्ट को कैसे हटाया जा सकता है?स्क्वायर ब्रैकेट को हटाने के लिए रेगेक्स के साथ मदद की आवश्यकता है और

उदाहरण के लिए, मैं hello [quote="im sneaky"] world

hello world

यहाँ है कि मैं क्या उपयोग करने के लिए कोशिश कर रहा हूँ है बनने के लिए की जरूरत है, लेकिन यह चाल

preg_replace("/[\[(.)\]]/", '', $str);

नहीं कर रहा है मैं बस के साथ समाप्त होता हूं

धन्यवाद

उत्तर

27

[और] रेगेक्स में विशेष वर्ण हैं। उनका उपयोग एक मैच के पात्रों को सूचीबद्ध करने के लिए किया जाता है। [a-z] "ए" और "जेड" के बीच किसी भी लोअरकेस अक्षर से मेल खाता है। [03b] "0", "3", या "बी" से मेल खाता है। "[" और "]" अक्षरों से मेल खाने के लिए, आपको उन्हें पिछले \ से बचाना होगा।

आपका कोड वर्तमान में "खाली स्ट्रिंग के साथ [](). के किसी भी चरित्र को प्रतिस्थापित करें" (जिस क्रम में आपने उन्हें स्पष्टता के लिए टाइप किया है) से पुन: व्यवस्थित किया गया है।


लालची मैच:

preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ] 

एक लालची मैच मेल खा सकते हैं कई [और] के। उस अभिव्यक्ति में an example [of "sneaky"] text [with more "sneaky"] here लगेगा और इसे an example here में बदल दिया जाएगा।

preg_replace('/\[.*?\]/', '', $str); 

गैर लालची मैचों संभव के रूप में कुछ वर्ण को पकड़ने की कोशिश:


पर्ल (आप सबसे अधिक संभावना लालची हो नहीं करना चाहती) एक गैर लालची मैच के लिए एक वाक्य रचना है। उसी उदाहरण का उपयोग करना: an example [of "sneaky"] text [with more "sneaky"] herean example text here बन जाता है।


केवल पहले निम्नलिखित अप करने के लिए]:

preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ] 

यह और अधिक स्पष्ट है, लेकिन कठिन पढ़ने के लिए है। एक ही उदाहरण पाठ का उपयोग करके, आपको गैर लालची अभिव्यक्ति का आउटपुट मिल जाएगा।


ध्यान दें कि इनमें से कोई भी सौदा स्पष्ट रूप से सफेद स्थान के साथ नहीं है। [और] के दोनों तरफ की जगहें बनी रहेंगी।

यह भी ध्यान रखें कि ये सभी विकृत इनपुट के लिए असफल हो सकते हैं। मैचों के बिना एकाधिक [एस]] एक आश्चर्यजनक परिणाम हो सकता है।

+0

स्पष्टीकरण के लिए बहुत धन्यवाद! –

+0

हम्म, विकृत इनपुट कुछ ऐसा है जो मैं चला सकता हूं। क्या मिलान नहीं होने के उदाहरण को संभालना संभव है? –

+0

मुझे यह जानना होगा कि आप इसे कैसे प्रबंधित करना चाहते हैं। विकृत इनपुट के साथ आप इसके लिए क्या उम्मीद करेंगे? –

1

मुझे लगता है कि आप वास्तव में अपने बाहरी कोष्ठक के लिए कोष्ठक चाहते क्योंकि यह एक समूह है। वर्ग ब्रैकेट अभिव्यक्तियों की एक श्रृंखला है। सुनिश्चित नहीं है कि इसे SO में कैसे टाइप करें।

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

बस मामले में आप एक पुनरावर्ती को हटाने के लिए देख रहे हैं:

$str = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $str); 

कि परिवर्तित कर देंगे:

यह [पाठ [अधिक पाठ]] अच्छा है

को यह:

था ठंडा है

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