दिलचस्प पोस्ट
Asp.net MVC 2 में बाल क्रियाओं में रीडायरेक्ट परिणाम की अनुमति क्यों नहीं है पायथन में कोशिश-छोड़कर-दूसरे का उपयोग करने के लिए क्या यह एक अच्छा अभ्यास है? विभिन्न पृष्ठभूमि एंड्रॉइड कार्यों के लिए एक इंटरफ़ेस का उपयोग कैसे किया जा सकता है? उत्तरदायी छवि मानचित्र मैं जेएसओएन को जीएसएन का उपयोग कर एक हैशमैक्स में कैसे परिवर्तित कर सकता / सकती हूं? अपेक्षित यदि कंडीशनल वैधीकरण विशेषता जावा कोड से यूएमएल आरेख (विशेषकर अनुक्रम आरेख) कैसे उत्पन्न करें जावा में सत्र प्रबंधन के लिए सर्वश्रेष्ठ विकल्प सी # समर्थन वापसी प्रकार सह प्रकार है? दोहरे सिम एंड्रॉइड फोन में दो सिम कार्ड की स्थिति का पता लगाएं VSCode में कई कार्यों को परिभाषित करें रेज़र विचार ईमेल टेम्पलेट के रूप में क्या jQuery के साथ scrollTop को चेतन करना संभव है? डबल अंडर्सकोर (__const) सी में क्या मतलब है? निष्पादन योग्य से विंडोज सेवा बनाएँ

PHP में preg करने के लिए मैं ereg expressions कैसे बदल सकता हूँ?

चूंकि POSIX नियमित अभिव्यक्ति (एरेग) को PHP 5.3.0 के बाद से पदावनत किया गया है, इसलिए मैं पुराने अभिव्यक्ति को PCRE (पर्ल संगत रेगुलर एक्सप्रेशन) (प्रीग) में कनवर्ट करने का एक आसान तरीका जानना चाहता हूं।

उदाहरण के लिए, मुझे यह नियमित अभिव्यक्ति है:

eregi('^hello world'); 

मैं preg_match संगत भावों में अभिव्यक्ति का अनुवाद कैसे कर सकता / सकती हूं?

नोट: यह पोस्ट ईग्री से प्रीग के रूपांतरण से संबंधित सभी पदों के लिए प्लेसहोल्डर के रूप में कार्य करता है, और संबंधित प्रश्नों के लिए डुप्लिकेट विकल्प के रूप में है। कृपया इस प्रश्न को बंद न करें।

सम्बंधित:

  • कैसे PHP के eregi को बदलने के लिए preg_match
  • Ereg_replace को सममूल्य preg_replace में परिवर्तित करना

वेब के समाधान से एकत्रित समाधान "PHP में preg करने के लिए मैं ereg expressions कैसे बदल सकता हूँ?"

सिंटैक्स में सबसे बड़ा परिवर्तन सीमांकक के जोड़ है

 ereg('^hello', $str); preg_match('/^hello/', $str); 

सीमांकक बहुत ज्यादा कुछ भी हो सकते हैं जो अल्फा-न्यूमेरिक, एक बैकस्लैश या व्हाइट स्पेस वर्ण नहीं है। सबसे अधिक इस्तेमाल किया ~ , / और #

आप मिलान करने वाले ब्रैकेट का भी उपयोग कर सकते हैं:

 preg_match('[^hello]', $str); preg_match('(^hello)', $str); preg_match('{^hello}', $str); // etc 

यदि आपका सीमांकक नियमित अभिव्यक्ति में पाया जाता है, तो आपको इसे बचाना होगा:

 ereg('^/hello', $str); preg_match('/^\/hello/', $str); 

आप preg_quote का उपयोग करके एक स्ट्रिंग में सभी सीमांकक और आरक्षित वर्णों से आसानी से बच सकते हैं:

 $expr = preg_quote('/hello', '/'); preg_match('/^'.$expr.'/', $str); 

इसके अलावा, पीसीई विभिन्न चीजों के लिए संशोधक का समर्थन करता है। सर्वाधिक उपयोग में से एक है केस-असंवेदनशील संशोधक i , ईग्री का विकल्प:

 eregi('^hello', 'HELLO'); preg_match('/^hello/i', 'HELLO'); 

आप मैन्युअल में पीपीआर में पीसीआरई वाक्यविन्यास का पूरा संदर्भ, साथ ही साथ अभिव्यक्ति को रूपांतरित करने में मदद करने के लिए POSIX regex और PCRE के बीच अंतर की सूची पा सकते हैं।

हालांकि, आपके सरल उदाहरण में आप नियमित अभिव्यक्ति का उपयोग नहीं करेंगे:

 stripos($str, 'hello world') === 0 

प्रीग के साथ एआरएफ़ प्रतिस्थापन (PHP 5.3.0 के रूप में) हमारे पक्ष में सही स्थानांतरित हो गया था

preg_match, जो पर्ल-संगत नियमित अभिव्यक्ति वाक्यविन्यास का उपयोग करता है, अक्सर ईरग का एक तेज़ विकल्प होता है।

आप पोर्ट ईरेज पैटर्न के लिए 4 मुख्य बातें preg से पता होना चाहिए:

  1. सीमांकक जोड़ें (/): 'pattern' => '/pattern/'

  2. अगर यह पैटर्न का एक हिस्सा है, तो 'patt/ern' => '/patt\/ern/'
    निम्नलिखित तरीके से प्रोग्राममैटिक रूप से प्राप्त करें:
    $old_pattern = '<div>.+</div>';
    $new_pattern = '/' . addcslashes($old_pattern, '/') . '/';

  3. ईरगली (केस-असंवेदनशील मिलान): 'pattern' => '/pattern/i' यदि आप केस के लिए एगारि फ़ंक्शन का प्रयोग कर रहे हैं, तो बस नए पैटर्न ('/ पैटर्न /') के अंत में 'आई' जोड़ें। ।

  4. एएससीआईआई मूल्य : यदि आप पैटर्न में संख्या का उपयोग करते हैं, तो ईराग में, यह माना जाता है कि आप एक चरित्र के एएससीआईआई की बात कर रहे हैं। लेकिन preg में, संख्या ASCII मान के रूप में नहीं माना जाता है। इसलिए, यदि आपके पैटर्न में एआरएसी अभिव्यक्ति (उदाहरण के लिए: नई लाइन, टैब आदि) में एएससीआईई मान होता है, तो उसे हेक्साडेसिमल में कनवर्ट करें और उसे एक्स के साथ प्रीफ़िक्स दें
    Example: 9(tab) becomes \x9 or alternatively use \t.

PHP संस्करण 5.3 ईआरएप से पदावनत।

हमारे पैटर्न में सिर्फ छोटे बदलाव के लिए ईग्रे में जाने के लिए

पहले आप अपने कोड में सीमांकक जोड़ चुके हैं

जैसे ereg('A-Z0-9a-z','string');

सेवा मेरे

preg_match('/A-Z0-9a-z/','string');

eregi – मामले में पिछले eregi रखने वाले 'मी' को अंतिम सीमांकक के बाद

जैसे

eregi('pattern','string');

सेवा मेरे

preg_match ('/pattern/i','string');

ereg() और preg_replace() में बस सिंटैक्स से अधिक मतभेद हैं:

  • प्रतिलाभ की मात्रा:

    • त्रुटि पर : दोनों वापसी FALSE
    • कोई भी मैच नहीं : ereg() FALSE , preg_match() 0 देता है
    • मैच पर : ereg() स्ट्रिंग की लंबाई या 1 , preg_match() रिटर्न हमेशा 1 देता है
  • मिलान किए गए सबस्ट्रिंग के परिणामस्वरूप सरणी: यदि कुछ सबस्ट्रिंग को ( ...a(b)? (b) में सभी ( (b) में नहीं मिला है ...a(b)? ), ereg() में संबंधित आइटम FALSE हो जाएगा, जबकि preg_match() यह सेट नहीं किया जाएगा बिलकुल।

यदि कोई अपने ereg() को preg_match() कनवर्ट करने के लिए पर्याप्त बहादुर नहीं है, तो वह mb_ereg () का उपयोग कर सकता है, जो अभी भी PHP 7 में उपलब्ध है।