regex - php preg_match return position of last match -
के साथ
preg_match ($ पैटर्न, $ subject, $ matches, PREG_OFFSET_CAPTURE);
क्या रिवर्स में स्ट्रिंग खोजना संभव है? अर्थात। strripos
के समान विषय में पैटर्न की आखिरी घटना की स्थिति वापस लौटाओ या क्या मुझे preg_match_all
के साथ सभी मैचों की स्थिति वापस करनी है? और $ matches
PHP के अंतिम तत्व का उपयोग नहीं है एक रैगेक्स विधि जो स्ट्रिंग को दाएं से बायीं ओर खोजती है (जैसे नेट में)। इसका समाधान करने के कई संभावित तरीके हैं:
-
PREG_SET_ORDER
फ्लैग के साथ प्रयोग करके आपको अंतिम मैच सेट दिलाता है - साथ स्ट्रिंग पीछे और स्ट्रिंग के अंत में लंगर डाले जाने वाले पैटर्न का उपयोग और निर्माण करने के लिए "रिवर्सेड" पैटर्न का निर्माण करना जो सुनिश्चित करता है कि स्ट्रिंग के अंत तक खोजा मुखौटा की कोई और घटनाएं नहीं हैं
- इससे पहले एक लालची क्वालिफ़ायर का उपयोग करें और अपने इच्छित स्थिति में मैच परिणाम शुरू करने के लिए
\ K
का उपयोग करें। एक बार स्ट्रिंग के अंत तक पहुंचने के बाद, regex इंजन तब तक बैकग्राउंड होगा जब तक कि यह मिलान नहीं पाता।
उदाहरण के साथ स्ट्रिंग $ str = 'xxABC1xxxABC2xx'
और के लिए >
', $ Str, $ matches, PREG_SET_ORDER); print_r (अंत ($ से मेल खाता है));
रास्ता 2:
यदि (preg_match ('/ \ d [AZ] + x /', strrev ($ str), $ मिलान) print_r (strrev ($ मैच [0]));
तरीका 3:
preg_match ('/ x [AZ] + \ d (? = (? :( ?! x [AZ] + \ डी)।) * $) / ', $ Str, $ मैच;
तरीका 3 (वेरिएंट):
preg_match ('/ x [AZ] + \ d (?!। * X [AZ] + \ d ) / ', $ Str, $ मैच);
रास्ता 4:
preg_match ('/^.* \ Kx [A-Z] + \ d /', $ str, $ मैच);
रास्ता 4 (वेरिएंट): बैक-ट्रैकिंग चरणों को सीमित करने के लिए, आप संभावित खंडों को एक परमाणु समूह में लगा सकते हैं:
preg_match ('/ ^ (? & Gt ; X [AZ] + \ d | [^ x] + | x (? [AZ] + \ d)) * \ Kx [AZ] + \ d / ', $ str, $ मैच);
Comments
Post a Comment