Regex XQuery MarkLogic中的模式或格式匹配

Regex XQuery MarkLogic中的模式或格式匹配,regex,xquery,marklogic,Regex,Xquery,Marklogic,我正在寻找给定的字符串,它必须是*(*)格式,*不应该有空格,在(之前没有两个单词 我正在搜索MarkLogic DB,以查看给定列值是否为[^\s]+\((?!\s)[^()]+(?格式,如果不是,请将其替换为此格式 我仍然无法获取数据,无法编写要更新的查询 我正在搜索数据库作为 let $query-opts := cts:search(doc(), cts:and-query(( cts:directory-query(("/xyz/documentDa

我正在寻找给定的字符串,它必须是
*(*)
格式,
*
不应该有空格,在
之前没有两个单词

我正在搜索MarkLogic DB,以查看给定列值是否为
[^\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>
       )
     )
let$query opts:=cts:search(doc(),
cts:和查询((
目录查询((“/xyz/documentData/”,“1”),
元素查询(
xs:QName(“cd:clause”),(:内部元素扩展用于检查查询id:)
cts:和查询((
cts:element属性值查询(xs:QName(“cd:clause”)、xs:QName(“tag”)、“Title”),(:仅当类型为“Title”:
元素属性值查询(xs:QName(“cd:xmetadata”)、xs:QName(“标记”)、“作者”)
))
)
))
对于$d,在$query选项中
返回(
对于$d//cd:document/cd:clause/cd:xmetadata[fn:matches(@tag,“Author”)]/cd:metadata\u string中的$x
其中fn:matches($x/string(),“[^\s]+\(?!\s)[^()]+(?函数不支持组修饰符,如
(?!
(?)。简化您的模式,并在匹配后捕获误报(如有必要)

在对你想做的事情进行有根据的猜测时,我认为你在寻找类似的东西:

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

HTH!

很抱歉响应太晚。非常感谢您的快速响应。这很有效。但无法匹配xyz 123(123_xyz)等值。括号周围不应该有空格,但可以在单词之间。我尝试了类似[^-\s][\w\s*]+[^-\s]([^\s][\w\s*]+[^\s]的方法,这也不起作用。非常感谢任何帮助。它不应该以空格开头,也不应该以空格结尾。我建议收集两组值:一组有效,另一组无效。对那些尝试了几次正则表达式的值运行单独的测试。我确实注意到上面注释中的正则表达式在
,您提到的匹配值示例中有一个
\u
,如果我没有弄错的话,
\w`不会捕获该值。