目前,我正在使用[^0-1]Matcher 类中的 find() 使用正则表达式将二进制值输入限制为仅 1 和 0。String binaryValue = "10", strRegex = "[^0-1]";Pattern p = Pattern.compile(strRegex);Matcher m = p.matcher(binaryValue);if(m.find()){ System.out.println("invalid");}else{ System.out.println("valid");}我希望在我的代码中发生的是:如果 binaryValue 仅包含 0 和 1 的组合以及可选的一个点(小数点),则打印“valid”有效格式示例:1001、10.01、.1001、1001.0
2 回答
慕村225694
TA贡献1880条经验 获得超4个赞
要匹配以下二进制十进制格式1001
, 10.01
, .1001
, 1001.0
,您可以使用以下命令:
^(?:[01]+|[01]*\.[01]+)$
这是如何运作的:
^
断言位置位于行的开头(?:[01]+|[01]*\.[01]+)
匹配以下选项之一选项 1:
[01]+
匹配任何二进制数字(0 或 1)一次或多次选项 2:
[01]*\.[01]+
匹配任意二进制数字(0 或 1)零次或多次,后跟原义点字符.
,然后匹配一个或多个二进制数字(0 或 1)一次或多次。$
断言位置位于行尾
请注意,您需要在 Java 中转义反斜杠^(?:[01]+|[01]*\\.[01]+)$
。
另请注意,这不会匹配0.
(或类似的1.
、11.
等),因为这种情况未明确包含在问题中。为了匹配这种情况,您可以使用(?:[01]+\.?|[01]*\.[01]+)
. 这两个正则表达式模式不允许字符串.
匹配。
慕婉清6462132
TA贡献1804条经验 获得超2个赞
^[01]+(.[01]+)?$
我解释一下这个正则表达式的作用:
^断言行首。
[01]+必须至少出现一个 0 或 1。
(.[01]+)然后,可能会出现一个点,后跟至少一个 0 或 1 。正如括号中所述,这也被视为第一个捕获组。
?前一个元素必须出现零次或一次。这可以防止匹配超过 1 个点。
$断言行尾。
你可以在这里测试一下
添加回答
举报
0/150
提交
取消