【发布时间】:2012-11-15 05:42:18
【问题描述】:
我有一个问题,我的用户有便盆......
详细说明,我的 Android 应用程序使用 Google 语音搜索返回语音结果,如果用户已将设置应用到“阻止冒犯性词语”,它将返回“离开”为“g* a***”
当试图确定用户所说的内容时,我会经常使用常见的匹配,例如:
if(voiceResult.matches(someCommand)) { //do something
如果用户选择说脏话,那么我会收到以下错误:
java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index X
我真的不能要求我的所有用户要么不发誓或关闭过滤器,特别是从我的测试来看,Google 语音搜索似乎有一个肮脏的头脑,并且经常在最随机的中间返回脏话句子!
所以,我对如何处理这种可能性有点迷茫......我一直在寻找一种在字符串中“忽略正则表达式”的方法,但我画了一个空白,我不知道如何我会动态转义字符串中包含的任何 *...
目前,我唯一的选择似乎是检测到“*”,然后很好地要求他们不要发誓或删除过滤器!
欢迎提出建议!除非你认为他们应该因为他们的不礼貌而被强制关闭......
请注意:“走开”目前未被过滤 - 这是一个示例......
编辑:我确认重复语音请求的最简单的正则表达式示例:
String userWords = "g* a***"
if(userWords.matches(userWords)) { // Then go on to compare userWords with other strings
编辑2:
String goAway = "g* a***";
String goAway1 = Pattern.quote(goAway);
String goAway2 = Pattern.quote(goAway);
if (goAway1.matches(goAway2)) { \\ do something
【问题讨论】:
-
我有数千个 .matches 和 .contains 所以重写我的代码以获得答案远非理想......
-
您能发布导致问题的特定正则表达式吗?
-
好吧,如果您的代码中有数千个地方存在问题并且您需要在每个地方都修复它,您希望解决方案是什么样的?
-
@andjav 您正在使用将正则表达式作为参数的方法(请参阅documentation。没有全局开关显示“请不要使用正则表达式”。所以您要么必须使用一种不同的方法(这仍然需要您更改代码中的每一个用法)或转义您的字符串,以便它们可以用作正则表达式。
-
@andjav 你做
myEscapedWords = Pattern.quote(myWords);它将转义所有正则表达式元字符,允许myEscapedWords用作匹配文字字符串myWords的正则表达式。