【发布时间】:2017-05-15 10:18:03
【问题描述】:
根据SPARQL 1.1 W3C Recommendation,正则表达式使用XQuery 1.0 and XPath 2.0 Regular Expression Syntax,它用反斜杠定义反向引用:
[9a] backReference ::= "\" [1-9][0-9]*
但是在DBpedia Virtuoso 07.20.3218 SPARQL Endpoint 上使用此语法会导致错误:
select replace(str(?class),"A.","\0\0") { ?class a owl:Class. }
Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad escape sequence in a short double-quoted string at '"\'
但是使用$ 可以:
select replace(str(?class),"A.","$0$0") { ?class a owl:Class. }
这是建议中的疏忽、Virtuoso 端点中的非标准语法还是我误解了建议?
【问题讨论】:
-
在我看来,您在这里将内联反向引用与替换反向引用混淆了。
-
如果我双重转义,那么我只是将数字本身作为输出,例如"\\0" 返回 "0"。
-
是的,当然,那条评论不正确。我已将其删除。替换反向引用语法是
$+ 捕获组的 ID。