2016-02-04 8 views
5

के बीच अंतर मैं समझता हूं कि सफेद अंतरिक्ष चरित्र से मेल खाने के लिए उपयोग किया जाता है, लेकिन कभी-कभी मुझे "\\ s" का उपयोग प्रीग मैच में और ठीक काम करने में किया जाता है। उदाहरण के लिए:PHP रेगेक्स: s और \ s

if (preg_match("/\\s/", $myString)) { 
    // there are spaces 
} 

if (preg_match("/\s/", $myString)) { 
    // there are spaces 
} 

क्या ऊपर दो कोड ब्लॉक के बीच कोई अंतर है?

+0

@ तुषार: यदि "\ s" => regex s, तो preg_match ("/ \ s /", "हैलो हाय") = 1 क्यों? – joHN

+0

@joHN: आउटपुट '("/\ s/"," हैलो हाय ") = 1' के लिए सही है क्योंकि केवल एक सफेद जगह है। पहली अभिव्यक्ति स्ट्रिंग में '\ s' से मेल खाने का प्रयास करेगी .. यहां प्रयास करें https://regex101.com/ – rock321987

+0

@ तुषार: var_dump (preg_match ("/\\ s/"," \ shello ", $ मैचों का प्रयास करें)); – joHN

उत्तर

4

मैन्युअल से टेक्स्ट को समझने की कोशिश कर रहा है।

http://php.net/manual/en/regexp.reference.escape.php

एकल और डबल उद्धृत पीएचपी तार बैकस्लैश का विशेष अर्थ नहीं होता। इस प्रकार यदि \ नियमित अभिव्यक्ति \\ के साथ मिलान किया जाना है, तो "\\\\" या '\\\\' का उपयोग PHP कोड में किया जाना चाहिए।

मैं सही नहीं हो सकता लेकिन मैं यहां जाता हूं।

आप की तरह

preg_match("/\\s/", $myString) 

कुछ का उपयोग करते हैं क्या यह क्या कर रहा है परिवर्तित \\ \ है, जो बारी-बारी स्ट्रिंग \ इस प्रकार यह सामान्य रूप से यानी व्यवहार करता है इसका अर्थ नहीं बदलता है और एस होने के लिए करना बनाया regex है '/ \/s' आंतरिक रूप से जो "रिक्त स्थान"

\ एक स्ट्रिंग में है आप के रूप में

preg_match("/\\\\s/", $myString) 

तो जवाब \ s या है इस प्रकार है कुछ करने के लिए होता है मिलान करने के लिए मेल खाता है \\ में एस regex स्ट्रिंग कोई फर्क नहीं पड़ता है, व्यक्तिगत रूप से मुझे लगता है कि \ s सरल और समझने में आसान है।

+0

यहां तक ​​कि मैं पैटर्न निर्दिष्ट करने के लिए एकल उद्धरण का उपयोग करता हूं, मुझे कोई फर्क नहीं पड़ता। मैं "\ s" से मेल खाने के लिए नहीं था, लेकिन अंतरिक्ष से मेल खाता था। तो \ s और \\ s (डबल या सिंगल कोट्स) का उपयोग करने में कोई अंतर नहीं है? – joHN

+0

@joHN मैनुअल क्या कह रहा है, इससे डबल या सिंगल कोट्स के संबंध में कोई फर्क नहीं पड़ता है, बैकस्लैश PHP स्ट्रिंग के लिए एक विशेष अर्थ है, यह सभी गैर-अल्फा वर्णों से बच निकलता है। बैकस्लैश स्वयं एक गैर-अल्फा होने के कारण बैकस्लैश में परिवर्तित हो जाता है, और जब संकलक "\" के बाद "\" देखता है तो यह रिक्त स्थान – codisfy

+0

से मेल खाता है, धन्यवाद। – joHN

0
\s - to match all white spaces 

\\s - to match all white spaces 

\\\s - to match all \s 
+0

मुझे यह नहीं मिला, क्या आप मुझे एक उदाहरण स्ट्रिंग दिखा सकते हैं जहां दोनों पैटर्न अलग-अलग परिणाम लौटाएंगे? – joHN

+0

आप इसे http://regexr.com/ –

+0

में देख सकते हैं कृपया अपने स्थानीय सिस्टम में प्रयास करें, ऑनलाइन उपकरण विशिष्टता को सही ढंग से नहीं दिखाते हैं। मुझे लगता है कि इसमें कोई फर्क नहीं पड़ता है। – joHN

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