2010-10-26 16 views
21

. एक php regex में वर्ण एक नई रेखा को छोड़कर सभी पात्रों को स्वीकार करता है। न्यूलाइन समेत सभी पात्रों को स्वीकार करने के लिए मैं क्या उपयोग कर सकता हूं?PHP रेगेक्स कोई भी कैरेक्टर

उत्तर

38

यह आमतौर पर सभी पात्रों पर कब्जा करने के लिए किया जाता है:

[\s\S] 

आप "का कोई अन्य संयोजन इस्तेमाल कर सकते हैं टाइप-एक्स + गैर-प्रकार-एक्स "उसी तरह से:

[\d\D] 
[\w\W] 

लेकिन [\s\S] के लिए एक आशुलिपि के रूप में सम्मेलन द्वारा मान्यता प्राप्त है" वास्तव में कुछ भी "।

यदि आप रेगेक्स को "s" संशोधक के माध्यम से रेगेक्स को "डॉटल" (ए.के.ए. "सिंगल-लाइन") मोड में स्विच करते हैं तो आप . का भी उपयोग कर सकते हैं। कभी-कभी यह एक व्यवहार्य समाधान नहीं है (उदाहरण के लिए, यदि आप पूरे regex को संशोधित नहीं करना चाहते हैं), एक ब्लैक बॉक्स में गतिशील रेगेक्स। ऐसे मामलों में अन्य विकल्प समान होते हैं, भले ही रेगेक्स कॉन्फ़िगर किया गया हो।

+0

बिल्कुल सही! धन्यवाद! – Entity

+0

ऐसा लगता है कि यह सभी पात्रों के बजाय एक चरित्र के लिए है .... –

+0

और आप ऐसा क्यों सोचेंगे? – Tomalak

8

यह . वर्ण है जिसका अर्थ है "हर चरित्र" (संपादित करें: ओपी संपादित)। और अगर आप उदाहरण के लिए, अपने regexp करने का विकल्प रों जोड़ने की जरूरत:

preg_match("`(.+)`s", "\n"); 
+0

क्या रेगेक्सपी की शुरुआत और अंत में आगे की कमी नहीं होनी चाहिए? – Entity

+5

हो सकता है, लेकिन delimiters की कोई भी जोड़ी करेगा। –

+0

PHP में नहीं। इसे एक डिलीमीटर (आप इसे चुन सकते हैं) के साथ शुरू करना और समाप्त करना है, और अंतिम डिलीमीटर से पहले हर चरित्र एक विकल्प है (यानी यू के लिए असहज, मैं केस-असंवेदनशील, आदि के लिए) –

1

[.\n]+ 

काम नहीं होगा?

कैसे (.|\n)+? मैंने इसका परीक्षण किया और ऐसा लगता है कि यह काम करता है।

मुझे पूरा यकीन है कि यह वास्तव में आप जो पूछ रहे थे उसकी शाब्दिक व्याख्या है।

+2

नहीं, यह नहीं होगा। – SLaks

+0

एक चरित्र वर्ग में '.' का अर्थ" कोई चरित्र "नहीं है। इसका मतलब है "एक बिंदु"। चरित्र वर्गों का अपना वाक्यविन्यास होता है। ;-) – Tomalak

+0

@ टोमालक: स्पष्टीकरण के लिए धन्यवाद, मुझे अभी यह एहसास हुआ। मुझे लगता है कि मुझे पोस्ट करने से पहले मुझे अपने उत्तरों का परीक्षण करना चाहिए। मैंने अभी अपना जवाब संपादित कर लिया है। – gnomed

0

पीएचपी मैनुअल page for Dot कहा गया है कि: PCRE_DOTALL विकल्प सेट कर दिया जाता

, तो डॉट्स नई-पंक्तियों के साथ-साथ मेल खाते हैं।

0

यहां एक महत्वपूर्ण चीज़ गायब है। [\s\S] एक चरित्र से मेल खाता है, जबकि एक नई रेखा एक चरित्र अनुक्रम हो सकती है। (विंडोज दो अक्षरों का उपयोग करता है: \r\n।) . (DOT_ALL संशोधक के साथ) और न ही [\s\S] न्यूलाइन अनुक्रम से मेल खाता है। किसी भी चरित्र या किसी भी नई लाइन से मेल खाने का सबसे अच्छा तरीका (.|\R) है, "एक नई लाइन या एक नई रेखा को छोड़कर सबकुछ"। \R मैचों \n, \r और \r\n

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