目前,我正在使用[^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
提交
取消