我有一个正则表达式,它基本上将所有绿色文本保持在特定模式之上(保存group1)。
这一切都在发挥作用!
现在,如果在解析每个java时有unicode字符。下面的m.find()抛出超出范围-2的异常索引。有问题的两个字符是:
文本[23] 55357个
文本[24] 56561
如下所示:Text String Value
String text = "Hi\n\nyo keep this here\n\nUnicode b4 here\n\nyo\ncut me:\n\nThis should be deleted";
System.out.println(text);
Pattern PATTERN = Pattern.compile("^(.+?)\\byo\\b(?:(?!cut me:|yo).)*cut me:", Pattern.DOTALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
text = m.group(1);
System.out.println(text);
}
所以,我的问题是为什么会抛出这个?
我已尝试在字符串上使用javaescape(apache utils)并且它可以防止抛出,但是如果我逃避它,我的正则表达式找不到匹配。
当然,如果删除unicode字符,它可以正常工作。
答案 0 :(得分:1)
你应该这样使用。
作为这应该删除在你的字符串中应该真正意味着那
Pattern PATTERN = Pattern.compile("^(.+?)\\nyo\\n(?:(?!cut me:|yo).)*cut me:", Pattern.DOTALL);
为什么会抛出异常?
StringIndexOutOfBound异常(根据Oracle文档)
按String方法抛出,以指示索引为负数 或者大于字符串的大小。
在您的情况下,当您尝试使用m.find()
尝试查找与模式匹配的输入序列的下一个子序列时,会抛出它。
正如您尝试使用\b
System.out.println(m.groupCount());
这将返回0.