2013-03-10 11 views
7

मैंने निम्नलिखित कोड लिखा (हाँ यह काम करता है) और सोच रहा था कि मुझे पैटर्न के अंदर '<' और '>' वर्णों से बचने की आवश्यकता क्यों नहीं है क्योंकि उन्हें 'विशेष' वर्ण माना जाता है PHP मैनुअल द्वारा।विशेष वर्णों से बचने वाले php regex

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches)); 

echo "<pre>"; 
var_dump(htmlentities($matches[0])); 
echo "</pre>"; 

उत्पादन:

int(1) 
string(12) "<html>" 
+0

"विशेष" चरित्र परिभाषित करें। सभी पात्र अपने तरीके से विशेष हैं, आप जानते हैं। :) – tchrist

उत्तर

15

केवल this page पर सूचीबद्ध वर्णों को PHP regex मिलान/प्रतिस्थापन में से बचने की आवश्यकता है।

< और >delimiter के रूप में कार्य कर सकते हैं, यह क्योंकि आप पहले से / (स्लैश) एक delimiter के रूप में अभिनय किया है दिए गए उदाहरण में भाग निकले जाने की जरूरत नहीं है।

सवाल

preg_quote() समारोह में दिए गए लिंक का जिक्र करते हुए एक पैटर्न में इंजेक्शन के लिए एक स्ट्रिंग से बचने के लिए और इसके वैकल्पिक दूसरा पैरामीटर सीमांकक भाग निकले जा करने के लिए निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता इस्तेमाल किया जा सकता है।

3

< और > मेटा वर्ण नहीं हैं अधिकांश संदर्भों है।

हालांकि वे के लिए इस तरह के रूप में इस्तेमाल कर रहे हैं:

  • नामित कैप्चर समूहों (?P<name>)
  • lookbehind दावे (?<=...)

तो यही कारण है कि preg_quote इसे सुरक्षित खेलते हैं और उन्हें निकल जाता है। यह तर्कसंगत रूप से अनावश्यक है, क्योंकि ( और ? से बचने के बाद पर्याप्त होगा। लेकिन यह या तो चोट नहीं पहुंचाता है।

+0

+1 सही उत्तर। –

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