【发布时间】:2014-04-25 23:44:12
【问题描述】:
我正在用 Java 编写一些简单的(我认为是)正则表达式来删除直接出现在某些指定标点符号旁边的星号或 & 号。
这是我的原始代码:
String ptr = "\\s*[\\*&]+\\s*";
String punct1 = "[,;=\\{}\\[\\]\\)]"; //need two because bracket rules different for ptr to left or right
String punct2 = "[,;=\\{}\\[\\]\\(]";
out = out.replaceAll(ptr+"("+punct1+")|("+punct2+")"+ptr,"$1");
这不仅删除了字符串的“ptr”部分,还删除了punct! (即用空字符串替换匹配的字符串)
我通过以下方式进一步检查:
String ptrStr = ".*"+ptr+"("+punct1+")"+".*|.*("+punct2+")"+ptr+".*";
Matcher m_ptrStr = Pattern.compile(ptrStr).matcher(out);
发现:
m_ptrStr.matches() //returns true, but...
m_ptrStr.group(1) //returns null??
我不知道我做错了什么,因为我之前使用过这种精确的方法,并且使用了更复杂的正则表达式,并且 group(1) 总是返回捕获的组。一定有什么我没能发现的,所以..有什么想法吗?
【问题讨论】:
-
无需引用
{、*或字符类中的括号 -
无论如何-我怀疑 .group(1) 在这里为空,因为它是您的第二组匹配
-
哦!我认为 group(1) 是第一个匹配的组,无论它在正则表达式字符串的哪个位置。这解释了很多,谢谢!
标签: java regex capturing-group