2 回答
TA贡献1752条经验 获得超4个赞
为什么要在同一组中尝试匹配它?只需添加另一部分以与 {0, 1} 量词匹配。
[:|;]{1}\-{0,1}([\(|\)|D|p]){1}
由于您在 Java 中使用它,您可能需要加倍反斜杠以便首先正确转义 String。
在这种情况下,您可以这样做:
:\)|[:|;]{1}\-{1}([\(|\)|D|p]){1}
或者由于案例似乎没有很多可能的匹配项,只需像这样枚举它们:
:\)|;-\(|;-\)
我测试了它,它工作得很好:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void main(String[] args) {
String s = ":) :) x-] :ox ;-( ;-) ;~( :~D ;)";
Pattern patt = Pattern.compile(":\\)|;-\\(|;-\\)");
Matcher m = patt.matcher(s);
while (m.find())
System.out.print(m.group() + " ");
}
}
打印所有 4 场比赛::) :) ;-( ;-)
TA贡献1797条经验 获得超6个赞
这应该做:
(:-?[\|DdPpXx\[\])(]|;-[\|DdPpXx\[\])(])
[\|DdPpXx\[\])(]
是可用于覆盖所有可能字符的字符集。
除此之外,我正在使用 OR 管道|
来涵盖这两种情况 wrt:
和;
。
添加回答
举报