Соответствие шаблона или формата в XQuery MarkLogic - PullRequest
0 голосов
/ 17 мая 2018

Я ищу данную строку, она должна быть в формате *(*), * не должна содержать пробела, нет двух слов перед (.

Я ищу в MarkLogic DB, чтобы увидеть,заданное значение столбца в формате [^\s]+\((?!\s)[^()]+(?<!\s)\), если не заменить его на этот формат.

Я все еще не могу выбрать данные и не могу написать запрос на обновление

Я ищу базу данныхas

    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 Ответ

0 голосов
/ 18 мая 2018

Функция fn:matches не поддерживает групповые модификаторы, такие как (?! и (?<!.Упростите свой шаблон и фиксируйте ложные срабатывания после матча с другим совпадением, если необходимо.

Делая обоснованное предположение о том, что вы пытаетесь сделать, я думаю, что вы ищете что-то вроде:

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

НТН!

...