2011-07-04 15 views
5

थोड़ी देर पहले मैंने SO पर this question का उत्तर दिया, लेकिन मुझे अभी भी पता नहीं चला कि मेरा जवाब क्यों काम करता है।क्यों (?! ^) बराबर है (? <! ^)?

किसी कारण से, स्ट्रिंग की शुरुआत के लिए नकारात्मक दिखने से नकारात्मक दिखने के समान व्यवहार होता है।

उदाहरण के लिए, पीएचपी

preg_replace("/(?!^)12/", "ab", "12345"); // 12345 
preg_replace("/(?<!^)12/", "ab", "12345"); // 12345 
preg_replace("/(?!1)23/", "ab", "12345"); // 1ab45 
preg_replace("/(?<!1)23/", "ab", "12345"); // 12345 

में मैं जानता हूँ कि यह सबसे अधिक उपयोगी सवाल कभी नहीं कहा है, लेकिन यह कुछ हफ़्ते के लिए मुझे सता किया गया है।

उत्तर

8

देखभाल एक शून्य चौड़ाई का दावा है। वास्तव में lookaheads और lookbehinds शून्य चौड़ाई भी हैं। इसलिए, इस मामले में इससे कोई फर्क नहीं पड़ता कि आप आगे या पीछे देख रहे हैं, फिर भी आप एक ही चरित्र की स्थिति देख रहे हैं।

यह this article में बहुत अच्छी तरह से समझाया गया है।

+0

धन्यवाद, इस तरह का अर्थ समझ में आता है, लेकिन मुझे लगता है कि मुझे रात में आराम करने की ज़रूरत है ताकि वह डूब जाए। –

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