Java Regex Pattern Syntax Exception
java.util.regex.PatternSyntaxException: Unmatched closing ')'
I don't immediately see what's wrong with your regex code although I suspect the problem would be apparent if we knew the values for toCensor and word. I've rewritten your code as follows:
String toCensor = "some sentence that uses frack word";
String word = "frack";
String replaceWith = "f#@!ck";
String regex = new StringBuilder("(?i)").append(word).toString();
toCensor = toCensor.replaceAll(regex, replaceWith);
So you are trying to run a regular expression across toCentor and do a case-insensitive match (that's the (?i) flag) looking for word. One problem is that if word has any special regex characters, they will be treated as part of the pattern. I think that's you bug. For example if you try this:
String word = ")ick";
You'd get the error:
Unmatched closing ')' near index 4 (?i))ick
This is similar but not exactly what you are seeing. You can turn off regex pattern compilation by wrapping the word in `"\Qword\E". For example:
String regex = new StringBuilder("(?i)\\Q").append(word).append("\\E").toString();
toCensor = toCensor.replaceAll(regex, replace);
'\Q' in the pattern turns on "quoting" and \E is the end of it. See also Pattern.quote(). You can also fix this by doing better sanity checking of the input to make sure that they are whole words. I suspect that ) is not a proper character to be censored.
分享到:
相关推荐
在Java中,正则表达式(Regex)是通过Pattern类和Matcher类来实现的,这两个类位于java.util.regex包中。下面我们将深入探讨Java正则表达式的基本概念、语法、常见使用方法以及如何在实际开发中应用。 1. **基本...
这份"Regex Quick Syntax Reference"压缩包包含了一个英文的PDF版本和EPUB版本的速查手册,对于学习和掌握正则表达式非常有帮助。 正则表达式的核心概念包括: 1. **特殊字符**:如`.`代表任意单个字符,`^`表示...
正则表达式(Regular Expression,简称Regex)是用于匹配字符串的一种强大的...这本2018年的《Regex Quick Syntax Reference》是学习和查阅正则表达式语法的好帮手,无论你是初学者还是经验丰富的开发者,都值得拥有。
在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在Java项目中使用正则表达式的流程,它提供了一系列内置的验证、提取和清洗方法,使得处理字符串...
Java中的正则表达式支持是通过`java.util.regex`包提供的,主要包括`Pattern`、`Matcher`和`PatternSyntaxException`三个核心类。`Pattern`类用于编译正则表达式并创建模式,`Matcher`类则负责匹配这些模式到目标...
要创建这个控件,首先我们需要继承`TextBox`类,并添加一个新的依赖属性,名为`RegexPattern`。这个属性将存储我们的正则表达式模式,通过它我们可以设置要应用的验证规则。此外,我们还需要实现`ValidationRule`类...
Java正则表达式(Regex)是Java编程语言中用于处理字符串的强大工具,它允许程序员根据预定义的模式匹配、查找、替换或者分析文本。在Java中,正则表达式主要通过`java.util.regex`包来实现。下面我们将深入探讨Java...
Pattern is a must to see how the Java regex patterns aredi erent from other languages such as Perl. Most of the functions discussed herin are from thejava.util.regex. Matcher class with a few from...
首先,Pattern类是Java.util.regex包下的一个类,它代表了一个正则表达式模式。你可以通过`Pattern.compile(String regex)`方法编译一个正则表达式字符串,生成Pattern对象。这个过程会预先进行语法检查,确保正则...
import org.apache.oro.text.regex.Pattern; import org.apache.oro.text.regex.PatternCompiler; import org.apache.oro.text.regex.PatternMatcher; import org.apache.oro.text.regex.Perl5Compiler; import org....
Chapter 3: Java Regex Classes Chapter 4: Regex for Username Chapter 5: Regex for Password Chapter 6: Regex for Email Chapter 7: Regex Color Coding Chapter 8: Regex for Image Files Chapter 9: Regex for...
Java正则表达式的实现主要依赖于`java.util.regex`包中的`Pattern`和`Matcher`两个核心类。本文将深入探讨这两个类的功能以及如何使用它们来进行字符串的匹配和操作。 #### 二、Pattern 类详解 `Pattern` 类代表了...
JavaScript(JS)Cookie和Java Cookie是Web开发中用于存储客户端数据的两种常见方式,而正则表达式(Regex)在处理字符串和数据匹配时扮演着重要角色。下面将详细阐述这三个知识点及其应用。 首先,JavaScript ...
NULL 博文链接:https://log-cd.iteye.com/blog/199661
在Java中,正则表达式的操作主要依赖于`java.util.regex`包,其中`Pattern`类是核心,它代表了一个正则表达式模式。`Pattern`类提供了编译正则表达式并生成匹配器的方法,而`Matcher`类则是用于执行实际的匹配和操作...
Java中的正则表达式功能主要通过`java.util.regex`包来实现,该包提供了两个核心类:`Pattern`和`Matcher`。 #### 二、Pattern类 `Pattern`类代表预编译的正则表达式。它提供了静态方法`compile()`用于创建`...
探索 Java 正则表达式语法的更多细节,并了解Pattern类中的引擎如何实际解释正则表达式。 不是通过文档(通过合同)推断正则表达式的含义,这允许我们直接验证引擎如何解释正则表达式。 自该项目开始(2014 年 2 ...