为了账号安全,请及时绑定邮箱和手机立即绑定

笑脸的正则表达式模式无法区分减号和范围

笑脸的正则表达式模式无法区分减号和范围

ABOUTYOU 2023-04-19 15:51:48
我正在做这个正则表达式[:|;]{1}([\\(|\\)|D|p]|[-\\(]|[-\\)]){1}对于这个候选人:) :) x-] :ox ;-( ;-) ;~( :~D ;)这里 https://regex101.com/r/3swEO2/3/预期结果是 :) :) ;-( ;-) 的匹配但是我无法创建带有减号的模式,当不在匹配器组的开头时,这些减号被识别为范围。对正确组的提示将不胜感激!
查看完整描述

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 场比赛::) :) ;-( ;-)


查看完整回答
反对 回复 2023-04-19
?
FFIVE

TA贡献1797条经验 获得超6个赞

这应该做:

(:-?[\|DdPpXx\[\])(]|;-[\|DdPpXx\[\])(])

[\|DdPpXx\[\])(]是可用于覆盖所有可能字符的字符集。

除此之外,我正在使用 OR 管道|来涵盖这两种情况 wrt:;

查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信