खोज…


टिप्पणियों

रिकर्स ज्यादातर पर्ल-संगत फ्लेवर में उपलब्ध है, जैसे:

  • पर्ल
  • PCRE
  • Oniguruma
  • बढ़ावा

पूरे पैटर्न को पुनर्जीवित करें

निर्माण (?R) के बराबर है (?0) (या \g<0> ) - यह आपको संपूर्ण जानकारी को पुनः प्राप्त करने देता है:

<(?>[^<>]+|(?R))+>

यह कोष्ठक के बीच के किसी भी पाठ के साथ ठीक से संतुलित कोण कोष्ठक से मेल खाएगा, जैसे <a <b> <a<b>c<d>e>

एक उपपरिवार में फिर से जागना

आप एक subpattern निम्नलिखित निर्माणों (स्वाद पर निर्भर करता है) का उपयोग कर में recurse कर सकते हैं, यह मानते हुए n एक पर कब्जा समूह संख्या है, और name एक कैप्चरिंग समूह का नाम।

  • (?n)
  • \g<n>
  • \g'0'
  • (?&name)
  • \g<name>
  • \g'name'
  • (?P>name)

निम्नलिखित पैटर्न:

 \[(?<angle><(?&angle)*+>)*\]

पाठ से मेल खाएगा जैसे: [<<><>><>] - वर्ग कोष्ठक के भीतर अच्छी तरह से संतुलित कोण कोष्ठक। मिलान का उपयोग अक्सर संतुलित निर्माण के लिए किया जाता है।

उपपाठ की परिभाषाएँ

(?(DEFINE) ... ) निर्माण आपको पुनरावृत्ति के माध्यम से बाद में आपके द्वारा संदर्भित उपपट्टों को परिभाषित करने देता है। पैटर्न में सामना करने पर इसका मिलान नहीं किया जाएगा।

इस समूह में उपपट्टिन परिभाषाएँ होनी चाहिए, जो केवल पुनरावृत्ति के माध्यम से सुलभ होंगी। आप व्याकरण को इस प्रकार परिभाषित कर सकते हैं:

(?x) # ignore pattern whitespace
(?(DEFINE)
  (?<string> ".*?" )
  (?<number> \d+ )
  (?<value>
    \s* (?:
        (?&string)
      | (?&number)
      | (?&list)
    ) \s*
  )
  (?<list> \[ (?&value) (?: , (?&value) )* \] )
)
^(?&value)$

यह पैटर्न निम्नलिखित की तरह पाठ को मान्य करेगा:

[42, "abc", ["foo", "bar"], 10]

ध्यान दें कि एक सूची में एक या अधिक मूल्य कैसे हो सकते हैं, और एक मूल्य ही एक सूची हो सकती है।

सापेक्ष समूह संदर्भ

Subpatterns को उनके संबंधित समूह संख्या के साथ संदर्भित किया जा सकता है:

  • (?-1) पिछले समूह में पुनरावृत्ति करेगा
  • (?+1) अगले समूह में आ जाएगा

इसके अलावा \g<N> वाक्य रचना के साथ प्रयोग करने योग्य है।

पुनरावर्ती में पश्च (पीसीआरई)

पीसीआरई में, रिकर्सन में रिक्रिएशन रखने से पहले बैकरेफर के लिए उपयोग किए जाने वाले मिलान किए गए समूह। लेकिन पुनरावृत्ति के बाद वे सभी इसे फिर से दर्ज करने से पहले जो वे थे, उसे रीसेट कर देते हैं। दूसरे शब्दों में, पुनरावृत्ति में मिलान किए गए समूह सभी भूल गए हैं।

उदाहरण के लिए:

(?J)(?(DEFINE)(\g{a}(?<a>b)\g{a}))(?<a>a)\g{a}(?1)\g{a}

माचिस

aaabba

पुनरावर्ती परमाणु (PCRE) हैं

पीसीआरई में, रिकर्सन के लिए पहले मैच के बाद यह ट्रैकबैक नहीं करता है। इसलिए

(?(DEFINE)(aaa|aa|a))(?1)ab

मेल नहीं खाता

aab

क्योंकि यह पुनरावृत्ति में aa मैच के बाद, यह फिर से केवल a मैच के लिए कोशिश नहीं की।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow