java 二进制数没有1且0直接相连的正则表达式

xdyibdwo  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(151)

下面是一个正则表达式,其中一个二进制数没有1,0直接跟在后面。

public static boolean isBin2(String bin2) {
        Pattern regexBinary2 = Pattern.compile("(01*01)*");

        Matcher matcher = regexBinary2.matcher(bin2);
        return matcher.matches();
    }

这是我在测试中使用的字符串:“一○一○一○一○”
运算式应检查如下:
允许使用10101010 --〉
不允许使用10010101 --〉
但是这个表达式总是返回false,即使二进制数是允许的,我也找不到原因。如果你能帮助我,那就太好了。

huwehgph

huwehgph1#

下面是一个不使用lookaround的正则表达式:

^0?(10)*1?$

它表示有效的输入以可选的0开始,后跟零个或多个10序列,并且可选地在结尾处有一个或多个1。
这也将匹配空输入。如果应该拒绝空输入,则添加\b

^\b0?(10)*1?$

在字符串文字中放置以下内容时,请确保对反斜杠进行转义:

Pattern regexBinary2 = Pattern.compile("^\\b0?(10)*1?$");
jckbn6z7

jckbn6z72#

我永远不明白为什么要用正则表达式来完成这么简单的任务。
一般表示式:

  • 很难写
  • 很难调试
  • 这是非常,非常难以阅读("^(?!.*([01])\\1)[01]+"- WTF?!)
  • 很难正确使用

例如,每次调用函数时,都创建了PatternMatcher的新示例,这肯定是不正确的。
一个简单的循环可以在30秒内写出来,并完美地解决了这个任务。

public static boolean isBin2(@NotNull String bin2) {
        if (bin2.length() < 2) return true;

        int i = 1;
        while (i < bin2.length()) {
            if (bin2.charAt(i) == bin2.charAt(i - 1)) return false;
            i++;
        }
        return true;
    }

相关问题