2008-09-25 17 views
5

मुझे एकाधिक अनुक्रम को हटाने के लिए सही regex स्ट्रिंग के साथ आने में परेशानी हो रही है? वर्ण। मैं एक से अधिक अनुक्रमिक प्रतिस्थापित करना चाहता हूं? एक के साथ?, लेकिन कौन से पात्र बचने के लिए ... मुझे भाग रहा है।PHP regex एकाधिक को हटाने के लिए? -मार्क

उदाहरण इनपुट:

पर इस बात है ??? और क्या???

वांछित उत्पादन:

पर इस बात है? और क्या?

मैं PHP में preg_replace() का उपयोग कर रहा हूं।

+2

+1 पृथ्वी पर प्रश्न चिह्न ब्लॉक की संख्या को कम करने के लिए +1। – Kobi

उत्तर

9
preg_replace('{\?+}', '?', 'Is this thing on??? or what???'); 

है कि आप केवल एक प्रश्न चिह्न से बचने के लिए है, में "\? +" प्लस मतलब है कि हम ", एक या अधिक वर्ण के साथ हर उदाहरण बदल रहे हैं, हालांकि मुझे लगता है \? {2, } "और भी बेहतर और अधिक कुशल हो सकता है (दो या अधिक प्रश्न चिह्न पात्रों के साथ हर मामले की जगह।

2

preg_replace('{\\?+}', '?', $text);

यह करना चाहिए।

आप बैकस्लैश पर प्रश्न चिह्न ही से बचने के लिए की जरूरत है, और फिर बैकस्लैश इज़ेल से बचें एक और बैकस्लैश के साथ एफ।

यह ऐसी स्थितियां है जहां सी # verbatim strings अच्छा है।

+0

आपको एक उद्धृत स्ट्रिंग में बैकस्लैश से बचने की आवश्यकता नहीं है। यदि आप चाहें तो आप कर सकते हैं, लेकिन आपको यह नहीं करना है। –

1

यह (मैं इसे परीक्षण किया है) काम करना चाहिए:

preg_replace('/\?+/', '?', $subject); 
1

यह

preg_replace('/(\?+)/m', '?', 'what is going in here????'); 

प्रश्न चिह्न भाग निकले होने की जरूरत है और मीटर बहु ​​मोड के लिए है क्या करना चाहिए।

यह एक अच्छा वेब साइट http://regex.larsolavtorvik.com/

0

आप पैटर्न

[?]+ 

? के प्रतिस्थापन के साथ की कोशिश की है पर इसे आज़माने के लिए था?

+0

'? 'एक चरित्र वर्ग में एक शाब्दिक प्रश्न चिह्न के रूप में माना जाता है। – HamZa

0
str_replace('??', '?', 'Replace ??? in this text'); 
+0

इसका आउटपुट "इस पाठ में बदलें?" होगा, जब तक कि आप इसे थोड़ी देर में नहीं डालते, और यदि आप ऐसा करते हैं तो यह अचानक preg_replace की तुलना में बहुत कम कुशल होगा। मेरे परीक्षण सर्वर पर, इसे चलाने के लिए, एक लूप में, 1 एम बार, (लगभग) 2.7 सेकंड (मोटे तौर पर) लिया, जबकि preg_replace केवल 1.2 सेकंड ले लिया। – grimman

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