Works for me:
SELECT * {
VALUES ?o { "+35" "abc+35def" }
FILTER regex(?o , "\\Q+35\\E", "i")
}
and in Java you need \\\\ due to both the levels of escaping (Java text,
SPARQL).
[[
Regex: Pattern exception: java.util.regex.PatternSyntaxException:
Dangling meta character '+' near index 0
]]
which gives the game away it's using java regexs :-)
The regex engine is Java's and the string is used untouched.
Strictly, it should be XSD v1 which are slightly different:
http://www.w3.org/TR/xmlschema-2/#regexs
and there is a strict Xerces provided alternative if you want exact XSD
regular expressions.
XSD and Java differs in only very small ways (e.g. XSD has one extra
modifier flag, "m", XSD has no \Q\E, and XSD has "Is" for unicode code
blocks inside \p e.g. \p{IsMongolian})
And now
http://www.w3.org/TR/xmlschema11-2/#regexs
Andy
On 21/01/14 02:32, Joshua TAYLOR wrote:
My apologies. I replied too quickly. I just wrote this test with
Jena's command line tools. To match the string "+35", I had to use the
"\\+35" in the query:
select ?label where {
values ?label { "+35" "-35" }
filter(regex(str(?label),"\\+35"))
}
---------
| label |
=========
| "+35" |
---------
That's _two_ slashes in the query string, which means that in Java
you'd end up writing
String query = ... + "filter(regex(...,\"\\\\+35\")" + ...;
Sorry for the hasty and inaccurate reply.
On Mon, Jan 20, 2014 at 9:27 PM, Joshua TAYLOR <joshuaaa...@gmail.com> wrote:
On Mon, Jan 20, 2014 at 8:48 PM, Martynas Jusevičius
<marty...@graphity.org> wrote:
OK maybe "+35" was a bad example. But isn't "+" a special char in
SPARQL regex? And there are more like "*", "?" etc.
http://www.w3.org/TR/xpath-functions/#regex-syntax
Oh, good point. But if it needs to be escape with a slash, then wouldn't
filter regex(str(?label), "\+35")
be fine? Note that if you're constructing this programmatically, you
might end up writing code like
String queryString = ... + "filter regex(str(?label), \"\\+35\")" + ...;
--
Joshua Taylor, http://www.cs.rpi.edu/~tayloj/