regex

2015-11-27 8 views
5

में यूआरएल स्लैश से ठीक से बचें मुझे एक पैटर्न में स्लेश से बचने में मदद की ज़रूरत है जो यूआरएल पथ की खोज करता है। मैं /orders/ इस तरह के बाद यदि कोई पथ पथ में किसी भी संख्या शामिल जाँच करने के लिए कोशिश कर रहा हूँ:regex

$str = '/admin/store/orders/20284?width...'; 

if (preg_match ('/orders/([0-9]+)/', $str, $matches)) 
{ 
    print_r($matches); 
} 

हालांकि, मैं स्लैश ठीक से बचने के लिए सक्षम नहीं हूँ। क्या कोई मदद कर सकता है? धन्यवाद।

+0

'\/order \/([0-9] +) \ /' ' –

उत्तर

4

एस्केपिंग बैकस्लाश (\/) के साथ किया जाता है। लेकिन नियमित अभिव्यक्ति को सीमित करने के लिए स्लैश चरित्र कोई भी चरित्र हो सकता है:

if (preg_match ('~orders/([0-9]+)~', $str, $matches)) 

भागने के बिना काम करेगा।

+0

आज़माएं मैं हमेशा' # 'का उपयोग करता हूं, लेकिन' | 'चाल करेगा। – Rudie

+0

मैं '#' और '| 'के बीच फ्लिप-फ्लॉप करता हूं क्योंकि मुझे बाद में पढ़ने में आसान लगता है, लेकिन अगर आपके पास अपने पैटर्न में वैकल्पिक खोज है तो यह काम नहीं करता है। – miken32

+0

@ miken32: वास्तव में, यही कारण है कि '|' का उपयोग करके delimiter एक अच्छा विकल्प नहीं है। ध्यान दें कि यदि आप एक्स संशोधक या अनुक्रम '(? # टिप्पणी) 'में उपयोग करते हैं तो' # 'का एक विशेष अर्थ भी है। अधिकांश समय, मैं '~' का उपयोग करता हूं ('/' से बेहतर विकल्प) –

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