我正在用 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) 总是返回捕获的组。一定有什么我没能发现的,所以..有什么想法吗?