This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 04c40e4928 GH-2833: Handle x flag in java regex
04c40e4928 is described below
commit 04c40e4928a3e54fff30f9e3819d28b96d1e5c79
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Dec 2 20:31:13 2024 +0000
GH-2833: Handle x flag in java regex
---
.../org/apache/jena/ext/xerces_regex/REUtil.java | 2 +-
.../java/org/apache/jena/sparql/expr/E_Regex.java | 6 +++---
.../org/apache/jena/sparql/expr/RegexEngine.java | 24 ++++++++--------------
.../jena/ext/xerces/impl/xpath/regex/REUtil.java | 8 ++++----
4 files changed, 16 insertions(+), 24 deletions(-)
diff --git
a/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
b/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
index 6ed482a0b4..9a859959e2 100644
--- a/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
+++ b/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
@@ -338,7 +338,7 @@ public final class REUtil {
StringBuilder buffer = null;
for (int i = 0; i < len; i ++) {
int ch = literal.charAt(i);
- if (".*+?{[()|\\^$".indexOf(ch) >= 0) {
+ if (".*+?{}[]()|\\^$".indexOf(ch) >= 0) {
if (buffer == null) {
buffer = new StringBuilder(i+(len-i)*2);
if (i > 0) buffer.append(literal.substring(0, i));
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
index 62ae033d0f..94f14e752f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
@@ -91,9 +91,9 @@ public class E_Regex extends ExprFunctionN
throw new ExprException("REGEX: Pattern is not a string: " +
vPattern);
if ( vFlags != null && !vFlags.isString() )
throw new ExprException("REGEX: Pattern flags are not a string: "
+ vFlags);
- String s = (vFlags == null) ? null : vFlags.getString();
- checkFlags(s);
- return makeRegexEngine(vPattern.getString(), s);
+ String flags = (vFlags == null) ? null : vFlags.getString();
+ checkFlags(flags);
+ return makeRegexEngine(vPattern.getString(), flags);
}
private static void checkFlags(String flags) {
diff --git
a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
index 091bb6e3d0..214a4425cf 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
@@ -94,26 +94,19 @@ public abstract class RegexEngine {
public static int makeMask(String modifiers) {
if ( modifiers == null )
return 0;
-
int newMask = 0;
for ( int i = 0 ; i < modifiers.length() ; i++ ) {
switch (modifiers.charAt(i)) {
- case 'i' :
+ case 'i' -> {
newMask |= Pattern.UNICODE_CASE;
newMask |= Pattern.CASE_INSENSITIVE;
- break;
- case 'm' :
- newMask |= Pattern.MULTILINE;
- break;
- case 's' :
- newMask |= Pattern.DOTALL;
- break;
- // Not supported by Java regex
- // case 'x': newMask |= Pattern.; break;
- case 'q' :;
- break;
-
- default :
+ }
+ case 'm' -> newMask |= Pattern.MULTILINE;
+ case 's' -> newMask |= Pattern.DOTALL;
+ case 'x' -> newMask |= Pattern.COMMENTS;
+ // Handled separately.
+ case 'q' -> {}
+ default ->
throw new ExprEvalException("Unsupported flag in regex
modifiers: " + modifiers.charAt(i));
}
}
@@ -132,7 +125,6 @@ public abstract class RegexEngine {
Matcher m = regexPattern.matcher(s);
return m.find();
}
-
}
public static class RegexXerces extends RegexEngine {
diff --git
a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
index a1cffa1f1c..04fa540321 100644
---
a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
+++
b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,7 +21,7 @@ import java.text.CharacterIterator;
/**
* {@literal @xerces.internal}
- *
+ *
* @version $Id: REUtil.java 828015 2009-10-21 13:56:13Z knoaman $
*/
public final class REUtil {
@@ -338,7 +338,7 @@ public final class REUtil {
StringBuilder buffer = null;
for (int i = 0; i < len; i ++) {
int ch = literal.charAt(i);
- if (".*+?{[()|\\^$".indexOf(ch) >= 0) {
+ if (".*+?{}[]()|\\^$".indexOf(ch) >= 0) {
if (buffer == null) {
buffer = new StringBuilder(i+(len-i)*2);
if (i > 0) buffer.append(literal.substring(0, i));