2
我有字符串,例如可以是3D-F2-C9-A6-B3字節正則表達式有隔板
這是我的正則表達式,我已經通過在線測試儀的正則表達式驗證它:
^([0-9A-Fa-f]{2}[-]){0,}$
問題是,示例字符串3D-F2-C9-A6-B3-4F
無效。我不得不在末尾添加一個減號,如3D-F2-C9-A6-B3-4F-
如何更改中間的分隔符必須設置但沒有人在最後的正則表達式?
我有字符串,例如可以是3D-F2-C9-A6-B3字節正則表達式有隔板
這是我的正則表達式,我已經通過在線測試儀的正則表達式驗證它:
^([0-9A-Fa-f]{2}[-]){0,}$
問題是,示例字符串3D-F2-C9-A6-B3-4F
無效。我不得不在末尾添加一個減號,如3D-F2-C9-A6-B3-4F-
如何更改中間的分隔符必須設置但沒有人在最後的正則表達式?
,最好的辦法就是把它打開一點:
^[0-9A-Fa-f]{2}(?:-[0-9A-Fa-f]{2})*$
詳細:
^
- 字符串的開始[0-9A-Fa-f]{2}
- 2個字符從定義的集合(?:-[0-9A-Fa-f]{2})*
- 的
-
零個或更多序列 - 一個連字符[0-9A-Fa-f]{2}
- 從所定義的2個字符設定$
- 串的端部(更好的選擇是\z
匹配非常結尾的字符串)var pattern = @"^[0-9A-Fa-f]{2}(?:-[0-9A-Fa-f]{2})*\z";
var input = "3D-F2-C9-A6-B3";
var matched = Regex.IsMatch(input, pattern); // = > True
通常,人們張貼的溶液等'^([0-9A發-F] {2} [ - ]){0,}在'[$'(注意了''? - ]')?通過這種方式,匹配變得非線性,它也允許'-'出現在字符串的末尾,並且在某些情況下導致性能較差並且字符串很長。重複像你這樣的模式('[0-9A-Fa-f]')在這裏不是什麼大問題(你甚至可以使用'RegexOptions.IgnoreCase'和刪除'AZ'來縮短它),否則只需動態地構建模式用重複塊定義一個變量。 –