2015-11-25 9 views
6

मैं 008/Preg मैच फ़ॉरवर्ड स्लैश

preg_match('/008\\//i', '008/', $matches); 
preg_match('/008\//i', '008/', $matches); 

मेरा प्रश्न मिलान करने के लिए कोशिश कर रहा हूँ कारण है कि नियमित अभिव्यक्ति के दोनों काम करती हैं। मैं दूसरे काम करने की उम्मीद करता हूं, लेकिन डबल बैकस्लैश एक काम क्यों करता है?

+0

आपके प्रश्न का उदाहरण आगे की स्लैश से मेल खाने का प्रयास कर रहा है, बैकस्लैश नहीं। – Barmar

+0

बस अगर आपको पता नहीं था, तो '/' एक डिलीमीटर के रूप में पूरी तरह से मनमाना है। जब मैं उन चीजों की खोज कर रहा हूं जिनमें स्लैश होता है, मैं अक्सर 'preg_match (' # 008/# ', $ string, $ match) जैसे कुछ करता हूं, इसलिए मैं भागने से बच सकता हूं। – miken32

उत्तर

5

क्योंकि PHP स्ट्रिंग्स में \\ का अर्थ है "बैकस्लैश से बचें"। चूंकि \/ का अर्थ यह नहीं है कि इसे बचने की आवश्यकता नहीं है (भले ही यह संभव हो), इसलिए वे इसका मूल्यांकन करते हैं।

दूसरे शब्दों में, इन दोनों को एक ही बात प्रिंट होगा:

echo '/008\\//i'; // prints /008\//i 
echo '/008\//i'; // prints /008\//i 

बैकस्लैश, (स्पष्ट \' को छोड़ कर) one of the few characters that can get escaped in a single quoted string है जो सुनिश्चित करता है कि आप पिछले भागने के बिना इस तरह 'test\\' के रूप में एक स्ट्रिंग बना सकते हैं बोली।

+0

आगे स्लैश को '/' द्वारा सीमित नियमित अभिव्यक्ति में भागने की आवश्यकता है। आप सही हैं कि अंतिम परिणाम वही है, और यह यह स्ट्रिंग है जो पीसीआरई कोड को पास कर दी गई है। – miken32

+0

हाँ, मेरा मतलब था कि चूंकि '\ /' 'किसी विशेष चीज़ का मूल्यांकन नहीं करता है, तो इसका प्रभाव '' \\/'' जैसा ही होता है। जाहिर है, इस विशेष रेगेक्स को आगे की स्लैश से बचने की आवश्यकता है, और दोनों उदाहरण ऐसा करते हैं, यही कारण है कि दोनों काम (वे वही हैं)। –

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