2011-02-04 16 views
17

के अंदर केवल मिलान करने वाले xxx ($ 1) yyy पैटर्न को प्रतिस्थापित करने के लिए कैसे करें I स्ट्रिंग के केवल मिलान भाग को मिटाने के लिए नियमित अभिव्यक्ति का उपयोग करने का प्रयास कर रहा हूं। मैं preg_replace फ़ंक्शन का उपयोग कर रहा हूं और मेल खाने वाले भाग के चारों ओर कोष्ठक डालकर मिलान करने वाले टेक्स्ट को हटाने का प्रयास किया है। उदाहरण:preg_replace चयनकर्ता

preg_replace('/text1(text2)text3/is','',$html); 

यह पूरे स्ट्रिंग को '' 'के साथ बदल देता है। मैं केवल टेक्स्ट 2 को मिटाना चाहता हूं, लेकिन टेक्स्ट 1 और टेक्स्ट 3 को बरकरार रखना चाहता हूं। मैचों से मेल खाने वाली स्ट्रिंग के हिस्से से मैं कैसे मिलान और प्रतिस्थापित कर सकता हूं?

उत्तर

8

इस प्रयास करें:

$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text); 

यह काम करता है आशा है!

संपादित करें:$1$2 जो सिफारिश की तरीका है करने के लिए \\1\\2 बदल दिया है।

+3

कृपया \\ n के बजाय $ n का उपयोग करें। – NikiC

+0

@NikiC क्या यह केवल शैली है या आपके पीछे इसका कोई कारण है? – aorcsik

+1

$ n का उपयोग \ n n मैन्युअल उद्धरण, आधिकारिक अनुशंसा है: "[...] में फॉर्म \\ n या (PHP 4.0.4) $ n के संदर्भ हो सकते हैं, बाद के रूप में पसंदीदा एक "। मुझे इसके पीछे सटीक तर्क नहीं पता है, लेकिन $ सिंटैक्स कम से कम एक है) अधिक पठनीय और बी) $ {n} के लिए भी समर्थन है। शायद अतिरिक्त कारण हैं। – NikiC

26

केवल अभिव्यक्ति के उन हिस्सों को रखने के लिए backreferences (यानी ब्रैकेट) का उपयोग करें जिन्हें आप याद रखना चाहते हैं। आप $1, $2, आदि का उपयोग करके प्रतिस्थापन स्ट्रिंग में सामग्री को याद कर सकते हैं .:

preg_replace('/(text1)text2(text3)/is','$1$2',$html); 
-4

सबसे आसान तरीका कई प्रकार के उल्लेख किया गया है। एक और विचार लुकहेड/लुकबैक है, वे इस बार अधिक हो गए हैं लेकिन अक्सर काफी उपयोगी हैं।

33

मिलान पैटर्न में text1 और text3 का उपयोग करने और फिर उन्हें प्रतिस्थापन स्ट्रिंग के माध्यम से वापस रखने का विकल्प है। आप दावे इस तरह उपयोग कर सकते हैं:

preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt); 

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

http://www.regular-expressions.info/lookaround.html

+0

यह अच्छा है, मुझे नहीं पता था कि आप यह कर सकते हैं! +1 –

+0

+1 यह उचित तरीका है। – Xeoncross

+1

बैक्रेरेंस बेहतर हो सकते हैं यदि आपका दिखने वाला पैटर्न निश्चित लंबाई मिलान नहीं करता है – leo

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