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/




Reply via email to