मैं दी गई स्ट्रिंग की तलाश में हूं, इसे *(*) प्रारूप में होना चाहिए, * में जगह नहीं होनी चाहिए, ( से पहले कोई दो शब्द नहीं होना चाहिए।

मैं यह देखने के लिए मार्कलोगिक डीबी खोज रहा हूं कि दिया गया कॉलम मान [^\s]+\((?!\s)[^()]+(?<!\s)\) प्रारूप में है, अगर इसे इस प्रारूप से प्रतिस्थापित नहीं किया गया है।

मैं अभी भी डेटा लाने में अटका हुआ हूं, और अद्यतन करने के लिए क्वेरी नहीं लिख सका

मैं डीबी के रूप में खोज रहा हूँ

    let $query-opts := cts:search(doc(),
      cts:and-query((
        cts:directory-query(("/xyz/documentData/"),"1"),  
            cts:element-query( 
                xs:QName("cd:clause"),  (: <clause> element inside extended for checking query id :)
                cts:and-query((
                    cts:element-attribute-value-query( xs:QName("cd:clause"), xs:QName("tag"), "Title" ),  (: only if the <clause> is of type "Title" :)
                    cts:element-attribute-value-query( xs:QName("cd:xmetadata"), xs:QName("tag"), "Author")

                ))
             )
        ))
for $d in $query-opts
return (
     for $x in $d//cd:document/cd:clause/cd:xmetadata[fn:matches(@tag,"Author")]/cd:metadata_string
     where fn:matches($x/string(), "[^\s]+\((?!\s)[^()]+(?<!\s)\)")
       return 
       (   <documents> {
      <documentId> {$d//cd:cdf/cd:documentId/string()}</documentId>
     }</documents>
       )
     )

यह त्रुटि अमान्य पैटर्न फेंक रहा है

1
Naren 17 मई 2018, 22:22

1 उत्तर

सबसे बढ़िया उत्तर

fn:matches फ़ंक्शन (?! और (?<! जैसे समूह संशोधक का समर्थन नहीं करता है। अपने पैटर्न को सरल बनाएं, और यदि आवश्यक हो तो किसी अन्य मैच के साथ मैच के बाद झूठी सकारात्मकता को कैप्चर करें।

आप जो करने की कोशिश कर रहे हैं उस पर एक शिक्षित अनुमान लगाते हुए, मुझे लगता है कि आप कुछ ऐसा ढूंढ रहे हैं:

where fn:matches($x, '^.+\([^)]+\).*$') (: it uses parentheses :)
  and fn:not(fn:matches($x, '^[^\s]+\([^\s)]+\)$')) (: but does not comply to strict rules :)

एचटीएच!

1
grtjn 18 मई 2018, 09:44