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 ''
} ;