java中的SPARQL查询正则表达式边界返回空

java中的SPARQL查询正则表达式边界返回空,java,regex,web,sparql,jena,Java,Regex,Web,Sparql,Jena,我是斯巴克和耶拿的新手。这里我使用的是Jena版本2.13。我想使用REGEX boundary(\b)从java web应用程序执行SPARQL查询。我使用正则表达式边界来匹配和查找精确的单词 我也在protege上运行相同的SPARQL查询 下面是我的java SPARQL查询: "PREFIX foaf: <http://xmlns.com/foaf/0.1/> " + "PREFIX rdf: <http:

我是斯巴克和耶拿的新手。这里我使用的是Jena版本2.13。我想使用REGEX boundary
(\b)
从java web应用程序执行SPARQL查询。我使用正则表达式边界来匹配和查找精确的单词

我也在protege上运行相同的SPARQL查询

下面是我的java SPARQL查询:

                "PREFIX foaf: <http://xmlns.com/foaf/0.1/> "
                + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                + "PREFIX owl: <http://www.w3.org/2002/07/owl#> "
                + "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> "
                + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
                + "PREFIX : <" + CROSS_NS + "> "
                + "SELECT ((?FoodAndBeveragesRecipes) AS ?Resep)((?FoodAndBeverages) AS ?a) "
                + "WHERE{ ?FoodAndBeveragesRecipes :IngR ?_IngR."
                + " ?_IngR :HasIngredients ?FoodAndBeverages;"
                + ":UnitValue ?Value;"
                + " :MeasurementUnit ?Measurements;"
                + " :Ing_Type ?IngType." 
                + "FILTER regex(str(?FoodAndBeverages), \"\\b" + recipe + "\\b\")}"
                + " ORDER BY ?FoodAndBeveragesRecipes";
“前缀foaf:”
+“前缀rdf:”
+“前缀owl:”
+“前缀xsd:”
+“前缀rdfs:”
+“前缀:”
+“选择((?食品和饮料)作为?储备)(?食品和饮料)作为?a)”
+“哪里{?食品和饮料规格:IngR?\u IngR。”
+“?_IngR:有配料?食品和饮料;”
+“:UnitValue?值;”
+“:MeasurementUnit?测量;”
+“:Ing_类型?Ing类型。”
+过滤正则表达式(str(?FoodAndBeverages),\“\\b”+配方+“\\b\”}
+“按?食品和饮料规格订购”;
recipe
是存储用户输入的字符串变量,它作为参数接收

当我执行查询时,Jena返回一个空集(甚至不是空指针异常),而Protégé返回/查找正确的结果。 我不知道问题是否出在正则表达式代码上

我想知道为什么我的正则表达式不能正常工作?有人能帮我吗


谢谢。

SPARQL正则表达式风格中不包括单词边界(与相同)。也许Protégé支持将其作为扩展,但Jena不支持。请尝试使用
(^ |\W)
(\W |$)

+ "FILTER regex(str(?FoodAndBeverages), \"(^|\\\\W)" + recipe + "(\\\\W|$)\")}"    

额外的反斜杠出现是因为字符串有两层转义:Java字符串文本,然后是SPARQL解释器。

您需要
\\\\W
-是的,4。一个级别是Java将
\\W
放入SPARQL,下一个级别是SPARQL字符串,正好离开
\W

谢谢。我试过你的建议,但结果是错误的。com.hp.hpl.jena.query.QueryParseException:第1行第608列出现词法错误。遇到:“W”(87),在“\”(^ 124;\”之后。有什么想法吗?我不知道,
\W
是受支持的。可能是转义问题?尝试使用不同的引号(
'
而不是
\”
)。我也尝试过,
+“FILTER regex(str(?FoodAndBeverages),'(^ 124\\\ W)+spertanyan2fix+”(\\W\$)}“
,结果仍然错误:第1行第608列出现词法错误。遇到:“\”(^ 124; \\”之后的“W”(87)”,另一个建议?@Jere id建议在连接所有这些stein之后打印查询,并显示出来。当存在两个级别的转义时,很难诊断转义问题。您需要
\\\\W
-是的,4\.一个级别是Java将
\\W
放入SPARQL,下一个级别是SPARQL字符串离开
\W