8

我在我的 python 程序的 SPARQL 查询中使用了这一行:

FILTER regex(?name, "%s", "i" )

%s用户输入的搜索文本在哪里)

我希望它匹配 if?name?featurenamecontains %s,但我似乎找不到任何使用 regex() 的文档或教程。我尝试了一些看似合理的事情:

FILTER regex((?name | ?featurename), "%s", "i" )
FILTER regex((?name || ?featurename), "%s", "i" )
FILTER regex((?name OR ?featurename), "%s", "i" )
FILTER regex((?name, ?featurename), "%s", "i" )

和每一个没有()

FILTER regex(?name, "%s", "i" ) || regex(?featurename, "%s", "i" )

这样做的正确方法是什么?谢谢

更新:使用 UNION 有效。但我发现如果你像这样重复 regex() 部分,它也可以工作:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))

这两种解决方案似乎都有些混乱,因为您必须使用带有相同字符串副本的 2 元素元组来填充两个%ss。

4

1 回答 1

14

那这个呢?

SELECT ?thing
WHERE {
  { 
    ?thing x:name ?name .
    FILTER regex(?name, "%s", "i" )
  } UNION {
    ?thing x:featurename ?name .
    FILTER regex(?featurename, "%s", "i" )
  }
}
于 2010-07-17T20:54:02.080 回答