पीसीआरई, 21 20 15 19 बाइट्स
(.|^)"\K(\\.|[^"])*
इसे यहाँ आज़माएँ।
यह एक चरित्र (या इनपुट की शुरुआत) से पहले दोहरे उद्धरण से मेल खाता है और फिर मैच को रीसेट करता है, यह सुनिश्चित करने के लिए कि डबल उद्धरण किसी अन्य मैच के साथ साझा नहीं किया गया है।
पीसीआरई, 25 23 बाइट्स
2 बाइट से गोल्फिंग करने के लिए मार्टिन ब्यूटनर को धन्यवाद।
(\\.|[^"])*+(?!"(?R)|$)
इसे यहाँ आज़माएँ।
व्याख्या
(
\\.|[^"] # An escaped character, or a character that isn't a double quote
)*+ # Possessive zero-or-more quantifier, which means backtracking
# could not happen after first match is found. That means if \\.
# matched, it would never switch to [^"], because it is always a
# match if it just stopped after the \\. without backtracking.
(?!"(?R)|$) # Make sure it is not followed by a double quote and another
# match, or the end of the input.
ध्यान दें कि निपुण क्वांटिफायर ( *+
) सुनिश्चित करता है कि नकारात्मक लुकहेड हमेशा एक पूरे स्ट्रिंग या गैर-स्ट्रिंग के पूरे खंड के बाद शुरू होता है।
4 मामले हैं:
- मैच एक तार के बाहर कहीं भी शुरू होता है।
\\.
स्पष्टीकरण के अनुसार एक दोहरे उद्धरण का मिलान कभी नहीं होगा। यह केवल अगले दोहरे उद्धरण से पहले समाप्त हो सकता है जो एक स्ट्रिंग, या इनपुट की समाप्ति शुरू करता है। दोनों मामले नकारात्मक रूपांतर को विफल करते हैं।
- मैच एक स्ट्रिंग की शुरुआत में शुरू होता है।
(\\.|[^"])*+
एक पूरी स्ट्रिंग से मेल खाएगा। अगला चरित्र एक डबल उद्धरण होना चाहिए, और इनपुट का अंत नहीं हो सकता है। दोहरे उद्धरण के बाद यह स्ट्रिंग के बाहर है, इसलिए यह दूसरा मैच नहीं हो सकता है। तो यह नकारात्मक रूपांतर से गुजरता है।
- मैच एक स्ट्रिंग के अंत में शुरू होता है। यह पिछले मामले की तरह ही एक खाली स्ट्रिंग से मेल खाता है। लेकिन यह स्पष्टीकरण के अनुसार कोई फर्क नहीं पड़ता।
- मैच एक स्ट्रिंग के बीच में शुरू होता है। असंभव क्योंकि मैच ओवरलैप नहीं होते हैं।
\
एक तार से पहले होगा ? उदाहरण के लिएabc\"def"
।