दिलचस्प पोस्ट
नॉन-ओवरलैपिंग सरणी ब्लॉक्स प्राप्त करने के लिए नम्पी स्ट्राइड_ट्रिक्स का उपयोग करना मैं स्विफ्ट एन्यूम की गणना कैसे प्राप्त करूं? क्रोम पैक एप और क्रोम एक्सटेंशन के बीच संचार करना है? स्विफ्ट में एक अलग व्यू नियंत्रक से एक TableView में डेटा को पुनः लोड कैसे करें ताज़ा करें और बंद ब्राउज़र क्रियाओं के बीच की पहचान करना सबसे तेज़ बच्चे हैं () या jQuery में () ढूंढें? event.wheelDelta रिटर्न अनिर्धारित HTML ड्रॉपडाउन सूची में MySQL डाटाबेस से डेटा प्राप्त करना मैं कैसे जांचूं कि कोई संख्या फ़्लोट या पूर्णांक है? विंडोज पर, "आयात टेन्स्फ्लो" चल रहा है, "_pywrap_tensorflow" नामक कोई मॉड्यूल नहीं उत्पन्न करता है एक WPF विंडो का आकार बदलें, लेकिन अनुपात बनाए रखें? पायथन 3.2 urllib2 आयात करने में असमर्थ (आयातई त्रुटि: urllib2 नामक कोई मॉड्यूल नहीं है) विंडोज 7 पर एसआईपी और पीईएक्टीटी कैसे स्थापित करें I php मेल के लिए smtp कॉन्फ़िगरेशन सी # में एक बाइट सरणी में संरचना कैसे परिवर्तित करें?

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

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

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

eregi('^hello world'); 

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

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

सम्बंधित:

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

Solutions Collecting From Web of "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 में उपलब्ध है।