首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用输入文本构造正则表达式中的模式语法异常

用输入文本构造正则表达式中的模式语法异常
EN

Stack Overflow用户
提问于 2015-05-15 01:41:52
回答 2查看 114关注 0票数 3

我正在逐行解析一个.txt,并考虑一个目标令牌。我用的是正则处理器引擎。

我将每一行与:

代码语言:javascript
运行
复制
"(^|.*[\\s])"+token+"([\\s].*|$)"

其中令牌是字符串。在以下情况下:

代码语言:javascript
运行
复制
token="6-7(3-7" 

它产生了以下例外:

代码语言:javascript
运行
复制
Exception in thread "main" java.util.regex.PatternSyntaxException: 
Unclosed    group near index 27
(^|.*[\s])6-7(3-7([\s].*|$)

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 01:52:05

你的记号里有特殊的字符。

看看Pattern.quote()

公共静态字符串引号(字符串s) 返回指定字符串的文字模式字符串。 此方法生成一个字符串,该字符串可用于创建与字符串s匹配的模式,就好像它是文字模式一样。 输入序列中的元字符或转义序列将没有特殊意义。

这应该对你有好处:

代码语言:javascript
运行
复制
String pattern = "(^|.*[\\s])" + Pattern.quote(token) + "([\\s].*|$)";

不用自己做绳子魔术!:)

票数 8
EN

Stack Overflow用户

发布于 2015-05-15 01:49:48

您应该确保在任何用于生成regex模式的纯文本字符串中转义特殊字符。将"("替换为"\(",并类似地替换为裸反斜杠(在任何其他步骤之前)、句点和所有其他特殊字符,至少所有您希望在输入中看到的字符。(如果它是用户的任意输入,则假设每个字符都将包括在内。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30250194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档