क्या कोई PHP फ़ंक्शन है जो लागू होने से पहले regex पैटर्न से बच सकता है?
मैं C # Regex.Escape()
फ़ंक्शन की तर्ज पर कुछ ढूंढ रहा हूं ।
क्या कोई PHP फ़ंक्शन है जो लागू होने से पहले regex पैटर्न से बच सकता है?
मैं C # Regex.Escape()
फ़ंक्शन की तर्ज पर कुछ ढूंढ रहा हूं ।
जवाबों:
preg_quote()
आप क्या देख रहे हैं:
विवरण
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote ()
str
हर वर्ण के सामने एक बैकस्लैश लेता है और रखता है जो नियमित अभिव्यक्ति सिंटैक्स का हिस्सा है। यह उपयोगी है यदि आपके पास एक रन-टाइम स्ट्रिंग है जिसे आपको कुछ पाठ में मिलान करने की आवश्यकता है और स्ट्रिंग में विशेष रेगेक्स वर्ण हो सकते हैं।विशेष नियमित अभिव्यक्ति वर्ण हैं:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
पैरामीटर
str
इनपुट स्ट्रिंग।
सीमांकक
यदि वैकल्पिक सीमांकक निर्दिष्ट किया जाता है, तो यह भी बच जाएगा। यह PCRE फ़ंक्शंस द्वारा आवश्यक सीमांकक से बचने के लिए उपयोगी है। The / सबसे अधिक इस्तेमाल किया जाने वाला सीमांकक है।
महत्वपूर्ण रूप से, ध्यान दें कि यदि $delimiter
तर्क निर्दिष्ट नहीं है, तो सीमांकक - चरित्र आपके रेगेक्स को घेरने के लिए उपयोग किया जाता है, आमतौर पर एक आगे स्लैश ( /
) - बच नहीं जाएगा। आप आमतौर पर जो भी परिसीमन आप अपने regex के साथ उपयोग कर रहे हैं उसे $delimiter
तर्क के रूप में पारित करना चाहेंगे ।
preg_match
व्हॉट्सएप से घिरे किसी दिए गए URL की घटनाओं का पता लगाने के लिए उपयोग करना:$url = 'http://stackoverflow.com/questions?sort=newest';
// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');
// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now: /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);
var_dump($matches);
// array(1) {
// [0]=>
// string(48) " http://stackoverflow.com/questions?sort=newest "
// }
$delimiter
तर्क के महत्व के बारे में @AlixAxel द्वारा लाया गया नोट , डॉक्स से उस तर्क का वर्णन, वास्तव में इसके बारे में उलझन के लिए एक स्पष्टीकरण, और इसका भारी अर्थ उदाहरण के तौर पर टिप्पणी करते हुए दिखाया preg_quote
जा रहा है कि मैं सबसे सरल मामले में इस्तेमाल किया जा सकता हूं जहां यह वास्तव में प्रोग्राम के रूप में इस्तेमाल किया जा सकता है एक regex और इसे दूसरे preg_*
फ़ंक्शन में डाल दिया (क्योंकि अन्यथा, क्या बात है?)। यदि आपको बदलाव पसंद नहीं है तो बेझिझक रोलबैक करें।
टी-रेक्स लाइब्रेरी से तैयार पैटर्न का उपयोग करना अधिक सुरक्षित होगा :
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::prepare(['\s', [$url], '\s']);
// ↑ $url is quoted
फिर सामान्य टी-रेक्स मैच करें:
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matches = $pattern->match($haystack)->all();
$delimiter
तर्क को निर्दिष्ट नहीं करते हैं तोpreg_quote()
यह किसी भी सीमांकक से बच नहीं पाएगा , यहां तक कि "डिफ़ॉल्ट" (या सबसे आम) भी नहीं/
।