2016-02-17 9 views
5

मैं निम्न स्ट्रिंगPCRE नियमित अभिव्यक्ति ओवरलैपिंग मैचों

001110000100001100001 

और इस अभिव्यक्ति

/[1]....[1]/g 

इस दो मैचों

matches

बनाता है लेकिन मैं चाहता हूँ यह भी मिलान करने उन दोनों के बीच पैटर्न जो कहने के लिए दिखते हैं, ओवरलैपिंग 1

मेरे पास बिल्कुल कोई सुराग नहीं है, यह कैसे काम कर सकता है? 0 के बजाय यह कोई वर्ण हो सकता है

+0

'/ (पैटर्न) (। *?) \ 1 /' इसका उपयोग करें और दूसरा कब्जा समूह मूल्य प्राप्त करें। देखने की कोई ज़रूरत नहीं है। – Tushar

+0

यदि आपको पूर्ण मिलान की आवश्यकता है, तो [(?:।? (? <= 1) .... 1) +] (https://regex101.com/r/rN2uV2/1) –

उत्तर

5

एक आम चाल एक अनचाहे सकारात्मक लुकहेड के अंदर कैप्चरिंग तकनीक का उपयोग करना है। preg_match_all के साथ इस regex का उपयोग करें:

(?=(1....1)) 

देखें regex demo

values are in $matches[1]:

$re = "/(?=(1....1))/"; 
$str = "001110000100001100001"; 
preg_match_all($re, $str, $matches); 
print_r($matches[1]); 

देखें lookahead reference:

Lookaround वास्तव में से मेल खाता है, लेकिन फिर मैच देता है, केवल परिणाम लौट रहा है: मैच या कोई चटाई नहीं चैप्टर। यही कारण है कि उन्हें "दावे" कहा जाता है। वे स्ट्रिंग में वर्णों का उपभोग नहीं करते हैं, लेकिन केवल यह कहते हैं कि कोई मिलान संभव है या नहीं। (?=(regex)):

आप एक अग्रदर्शी अंदर regex के मैच संग्रहीत करना चाहते हैं, तो आप अग्रदर्शी अंदर regex के आसपास पुट पर कब्जा करने कोष्ठक, इस तरह किया है।

+1

आपको बहुत धन्यवाद, मैं पहले से ही सकारात्मक दिखने के साथ खेल रहा है लेकिन सही नहीं किया है, यह सही और अच्छी तरह से समझाया गया है –

संबंधित मुद्दे