Regex: Difference betwen negative lookbehind and negation -


से:

\ b \ w + (? & Lt;! S) \ b । यह निश्चित रूप से \ b \ w + [^ s] \ b के समान नहीं है जब जोन के पर लागू होता है, तो पूर्व जोन और बाद का जोन ' (एपॉस्ट्रॉफी सहित) से मेल खाएगा। मैं यह पता लगाने के लिए क्यों छोड़ दूँगा (संकेत: \ b एपॉस्ट्रॉफी और एस के बीच मैच) बाद वाला एकल अक्षर जैसे "ए" या "आई" से मेल नहीं खाएगा।

क्या आप इसकी व्याख्या कर सकते हैं?

इसके अलावा, क्या आप स्पष्ट रूप से स्पष्ट कर सकते हैं \ b करता है, और यह एपॉस्ट्रॉफी और s के बीच क्यों मेल खाता है?

\ b एक शून्य-चौथा दावा है जिसका अर्थ है इन पात्रों की स्थिति (उस लिंक से ली गई) को शब्द सीमाएं माना जाता है:

  • स्ट्रिंग में पहले अक्षर के पहले, यदि पहला अक्षर एक शब्द का अक्षर है।
  • स्ट्रिंग में अंतिम वर्ण के बाद, यदि अंतिम वर्ण एक शब्द का चरित्र है।
  • स्ट्रिंग में दो वर्णों के बीच, जहां एक शब्द का वर्ण होता है और दूसरा शब्द वर्ण नहीं है।

    वर्ड अक्षर निश्चित रूप से \ w हैं। s एक शब्द चरित्र है, लेकिन ' नहीं है उपरोक्त उदाहरण में, ' और s के बीच का क्षेत्र एक शब्द सीमा है।

    स्ट्रिंग "Jon's" इस तरह दिखता है यदि मैं एंकर और सीमाएं (पहले और आखिरी \ b एस को ^ और $ के समान पदों पर हाइलाइट करता है) : ^ जॉन \ बी '\ बीएस $

    नकारात्मक दिखने वाला दावा (? & Lt;! S) \ b का अर्थ है कि यह केवल मैच होगा एक शब्द सीमा यदि यह पत्र s से पहले नहीं है (अर्थात अंतिम शब्द वाला चरित्र s नहीं है) इसलिए यह एक निश्चित सीमा के तहत एक शब्द सीमा के लिए दिखता है।

    इसलिए पहला रेगएक्स इस तरह कार्य करता है:

    1. \ b \ w + पहले तीन अक्षर J n से मेल खाता है।

    2. वास्तव में एक और शब्द सीमा है n और ' के बीच में ऊपर दिखाए गए हैं, इसलिए (? & Lt;! S) \ b मिलान यह शब्द सीमा क्योंकि यह एक n से पहले है, एक s नहीं।

    3. क्योंकि पैटर्न के अंत तक पहुँच गया है, परिणामस्वरूप मैच जोन है।

      पूरक वर्ण वर्ग [^ s] \ b इसका अर्थ है कि कोई भी अक्षर जो अक्षर s नहीं है, उसके बाद एक शब्द सीमा है

      इसलिए दूसरा रीजेक्स इस तरह काम करता है:

      1. \ b \ w + पहले तीन अक्षर J n से मेल खाता है।

      2. ' अक्षर s नहीं है (यह चरित्र वर्ग [^ s] ) को पूरा करता है, और इसके बाद एक शब्द सीमा ( ' और s ), यह मेल खाता है।

      3. पैटर्न के अंत तक पहुंच गया है, परिणामस्वरूप मैच जॉन '। पत्र s है नहीं मिलान है क्योंकि शब्द सीमा पहले ही मिलान हो चुकी है।

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

ruby on rails - Convert a Activerecord result with has_one associations into a single hash per record -

javascript - Read complete data from stream from onMessage -