यह टूल क्या करता है
PCRE regex टेस्टर असली PCRE2 लाइब्रेरी से आपके टेक्स्ट पर रेगुलर एक्सप्रेशन जाँचता है, वही इंजन जो PHP, Perl-स्टाइल टूल्स और कई वेब सर्वर इस्तेमाल करते हैं। मैच हाइलाइट होते हैं, हर मैच अपनी पोज़िशन और कैप्चर ग्रुप के साथ लिस्ट होता है, और वैकल्पिक replacement से preg_replace-स्टाइल substitution का नतीजा दिखता है।
असली इंजन पर टेस्ट करना इसलिए ज़रूरी है क्योंकि PCRE और JavaScript के रेगुलर एक्सप्रेशन में छोटे लेकिन अहम फ़र्क होते हैं। जो पैटर्न ब्राउज़र-आधारित टेस्टर में चलता है, वह PHP में कंपाइल होने में फ़ेल हो सकता है, या कुछ और मैच कर सकता है।
इसे कैसे इस्तेमाल करें
- PCRE पैटर्न (delimiters के बिना) में बिना delimiters के पैटर्न टाइप करें।
- जिस टेक्स्ट में खोजना है उसे टेस्ट स्ट्रिंग में पेस्ट करें।
- ज़रूरी modifiers चालू करें: सभी मैच के लिए g (preg_match_all की तरह), i, m, s, x, U, और Unicode-aware
\w,\dऔर\bके लिए u। - चाहें तो substitution का प्रीव्यू देखने के लिए इससे बदलें भरें। नंबर वाले ग्रुप के लिए
$1या${1}, नाम वाले ग्रुप के लिए${name}और पूरे मैच के लिए$0इस्तेमाल करें।
अमान्य पैटर्न पर PCRE2 का अपना एरर मैसेज और पैटर्न में वह पोज़िशन दिखती है जहाँ वह अटक गया।
उदाहरण
डिफ़ॉल्ट पैटर्न \((?:[^()]++|(?R))*\) संतुलित कोष्ठक (balanced parentheses) खोजता है। यह कोष्ठकों की ऐसी जोड़ी से मैच करता है जिसके अंदर या तो कोष्ठक के अलावा दूसरे अक्षर हों या, recursively, फिर से पूरा पैटर्न। उदाहरण टेक्स्ट पर यह (a, g(b, c)) और ((x), y) खोजता है और आख़िर के बिना बंद हुए कोष्ठक को अनदेखा करता है। JavaScript रेगुलर एक्सप्रेशन इसे व्यक्त नहीं कर सकते।
दूसरी लाइन पर रकम और करेंसी कोड की अदला-बदली के लिए (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) को replacement ${cur} $1 के साथ आज़माएँ।
जानने लायक PCRE फ़ीचर
- Possessive quantifiers (
*+,++,?+) और atomic groups ((?>...)) जो मैच कर लेते हैं उसे कभी वापस नहीं छोड़ते, जिससे बेकाबू backtracking रुकती है। \Kमैच की शुरुआत रीसेट करता है, lookbehind का एक आसान विकल्प।(?R),(?1)या(?&name)के साथ Recursion nested संरचनाओं से मैच करता है।(?i)जैसे Inline modifiers पैटर्न के किसी हिस्से का व्यवहार बदलते हैं।
सुझाव
- PHP में पैटर्न को
/.../या~...~जैसे delimiters में लपेटें और ऐसा delimiter चुनें जो पैटर्न में न आता हो, ताकि उसे escape न करना पड़े। - जब आपके टेक्स्ट में accented अक्षर या CJK अक्षर हों तो u चालू करें, ताकि
\wउनसे मैच करे।
अक्सर पूछे जाने वाले सवाल
› यह JavaScript regex टेस्टर से कैसे अलग है?
यह पेज PCRE2 चलाता है, जो PHP के preg_ फ़ंक्शन, Nginx, Apache और कई दूसरे टूल्स के पीछे का इंजन है, WebAssembly में कंपाइल करके। यह ऐसा सिंटैक्स सपोर्ट करता है जो JavaScript में नहीं है, जैसे (?R) से recursion, a++ जैसे possessive quantifiers, atomic groups, \K, (?P<name>...) ग्रुप और x व U modifiers।
› क्या मुझे /pattern/i जैसे delimiters टाइप करने होंगे?
नहीं। सिर्फ़ पैटर्न डालें और चेकबॉक्स से modifiers चालू करें। PHP में `preg_match('/\d+/i', $s)` का मतलब है पैटर्न `\d+` और केस अनदेखा करें चालू।
› मुझे "match limit exceeded" क्यों मिला?
कुछ पैटर्न, जैसे किसी लंबी मैच न होने वाली स्ट्रिंग पर ^(a+)+$, exponential बार backtrack करते हैं। पेज responsive बना रहे, इसलिए टेस्टर पचास लाख स्टेप के बाद रुक जाता है। PHP में भी ऐसा ही सुरक्षा उपाय है, pcre.backtrack_limit, और सीमा पार होने पर preg_match false लौटाता है।
› क्या मेरा टेक्स्ट अपलोड होता है?
नहीं। PCRE2 WebAssembly मॉड्यूल एक बार डाउनलोड होता है और सब कुछ आपके ब्राउज़र में चलता है।