【发布时间】:2016-11-05 11:17:34
【问题描述】:
我正在尝试使用 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"))
虽然这个查询被接受,但它不会返回任何结果,我猜这是因为它将它作为退格而不是 wordbounds。
我试过寻找它使用的风味,我唯一发现的是它使用XQuery 1.0 and XPath 2.0 Functions and Operators
感谢您的宝贵时间!
【问题讨论】:
-
此错误消息comes from the lexer,不是来自正则表达式引擎。所以尝试双重逃避:
\\bV\\b看看会发生什么。除此之外,风味appears to be PCRE(至少引用了这个库)。 -
谢谢,我只是尝试双重转义,没有更多错误,但就像 \b 一样,不会返回任何结果。我去看看 PCRE,谢谢!
-
PCRE 是你能得到的最好的东西,它肯定支持
\b,但也许regex函数锚定了模式¯\_(ツ)_/¯,所以试试@ 987654333@. -
@LucasTrzesniewski 刚刚试了一下,还是没有结果。也许 DBPedia sparql 使用了另一种风格或旧标准?既不能匹配 \b 也不能匹配 \> 似乎真的很奇怪
-
@ManuAndrei 对我来说,它适用于单词边界,请参阅
select distinct ?s ?l where { ?s a dbo:SoccerClub . ?s rdfs:label ?l FILTER(LANGMATCHES(LANG(?l),'en')) FILTER(regex(str(?l), "\\bD", "i")) } LIMIT 100,它返回名称中以 d 开头的单词的足球俱乐部。