我试图只匹配完整字符串,而不是使用FILTER匹配sparql中的子字符串。
我不太确定SPARQL是否支持wordbounds,看看如何使用
FILTER(regex(?name, "V", "i"))
会找到那些包含V,IV,VI,VII等的人。
现在,我已尝试使用
FILTER(regex(?name, "\<V\>", "i"))
在端点上生成编译错误
Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad escape sequence in a short double-quoted string at '"\'
我也尝试过做
FILTER(regex(?name, "\bV\b", "i"))
虽然接受了这个查询,但它并没有返回任何结果,我想这是因为它将它作为退格而不是单词边界。
我试过寻找它使用的味道,我发现它唯一的用途就是使用XQuery 1.0 and XPath 2.0 Functions and Operators
谢谢你的时间!
答案 0 :(得分:2)
Word界限与\\b
一起使用,请参阅
SELECT DISTINCT ?s ?l WHERE {
?s a <http://dbpedia.org/ontology/SoccerClub> ;
<http://www.w3.org/2000/01/rdf-schema#label> ?l
FILTER(LANGMATCHES(LANG(?l),'en'))
FILTER(REGEX(STR(?l), "\\bD", "i"))
} LIMIT 100
返回足球俱乐部,其英文名称以“d”开头。
ETA:Virtuoso开发者报告它使用了Perl Compatible Regular Expressions。
答案 1 :(得分:1)
SPARQL 1.1的正则表达式功能在标准的17.4.3.14 REGEX中有所描述:
调用XPath fn:matches函数以将文本与正则表达式模式匹配。正则表达式语言在XQuery 1.0和XPath 2.0函数和操作符部分7.6.1 Regular Expression Syntax中定义。
根据一些链接,您最终会在Appexndix F: Regular Expressions处找到正则表达式的XML架构定义。如果您在该文档中查找多字符转义符,您将找到:
- \瓦特 [#x0000-#x10FFFF] - [\ p {P} \ p {Z} \ p {C}](除集合外的所有字符) &#34;标点符号&#34;,&#34;分隔符&#34;和&#34;其他&#34;人物)
- \ W
[^ \ W]
正如我读到的那样,我认为 \ W 是您正在寻找的单词分隔符。