Xquery Functx模块和带字符结尾的长字符串

Xquery Functx模块和带字符结尾的长字符串,xquery,basex,xquery-3.1,Xquery,Basex,Xquery 3.1,我在处理带有行尾字符的字符串时遇到了一个问题。以下代码应该可以工作(?) 然而,它给出了一个失败 “某物 ;布拉”预期,“某物 ;布拉其他” 返回 删除断线可以使测试正常工作。我不明白的是什么?:) BR我认为问题在于functx函数的定义或实现: 正则表达式点匹配和替换默认值“如果输入字符串不包含与正则表达式匹配的子字符串,则函数的结果是与输入字符串相同的单个字符串。”;如果添加标志m参数 declare function functx:substring-before-last

我在处理带有行尾字符的字符串时遇到了一个问题。以下代码应该可以工作(?)

然而,它给出了一个失败

“某物 ;布拉”预期,“某物 ;布拉其他” 返回

删除断线可以使测试正常工作。我不明白的是什么?:)


BR

我认为问题在于functx函数的定义或实现:

正则表达式点匹配和替换默认值“如果输入字符串不包含与正则表达式匹配的子字符串,则函数的结果是与输入字符串相同的单个字符串。”;如果添加标志
m
参数

declare function functx:substring-before-last
  ( $arg as xs:string? ,
    $delim as xs:string )  as xs:string {

   if (matches($arg, functx:escape-for-regex($delim)))
   then replace($arg,
            concat('^(.*)', functx:escape-for-regex($delim),'.*'),
            '$1', 'm')
   else ''
 } ;

您得到了正确的匹配、替换和比较。

谢谢!查看代码总是一个好主意:)
declare function functx:substring-before-last
  ( $arg as xs:string? ,
    $delim as xs:string )  as xs:string {

   if (matches($arg, functx:escape-for-regex($delim)))
   then replace($arg,
            concat('^(.*)', functx:escape-for-regex($delim),'.*'),
            '$1')
   else ''
 } ;
declare function functx:substring-before-last
  ( $arg as xs:string? ,
    $delim as xs:string )  as xs:string {

   if (matches($arg, functx:escape-for-regex($delim)))
   then replace($arg,
            concat('^(.*)', functx:escape-for-regex($delim),'.*'),
            '$1', 'm')
   else ''
 } ;