[英]Use regex to match string in given condition
最短正則表達式是主要問題,而不是反向引用。
使用最短的正則表達式匹配以下格式的所有字符串:
<two digits><connect char><three digits><connect char><four digits>
為方便閱讀:
<two digits>
<connect char>
<three digits>
<connect char>
<four digits>
[-./ ]
(不包括[]
)中的任何一個。 一些有效字符串:
55.635.8828
72/683/1582
86 942 7682
581827998 // Both connect chars is omit
一些無效字符串:
56.855/9856 // Two connect chars are different.
56 4559428 // Same as above
這個短正則表達式將匹配所有有效的字符串:
^\d{2}[-./ ]?\d{3}[-./ ]?\d{4}$
但它也匹配無效的:
52-355/9984
這個正則表達式將匹配所有正確的字符串,但很長。 我把它分成多行以便於閱讀:
^(\d{2}-?\d{3}-?\d{4})|
(\d{2}\.?\d{3}\.?\d{4})|
(\d{2}/?\d{3}/?\d{4})|
(\d{2} ?\d{3} ?\d{4})$
你能建議我一個符合要求的更短的正則表達式嗎?
您可以捕獲分隔符並使用反向引用而不是重復模式
^\d\d([-./ ]?)\d{3}\1\d{4}$
^ ^ ^^
請參閱正則表達式演示
在C#中:
var isValid = Regex.IsMatch(s, @"^\d\d([-./ ]?)\d{3}\1\d{4}$");
如果您只想將ASCII數字與\\d
(默認情況下在.NET正則表達式中匹配所有Unicode數字 )匹配, RegexOptions.ECMAScript
選項傳遞給正則表達式編譯器。
圖案細節
^
- 字符串的開頭 \\d\\d
- 任意2位數 ([-./ ]?)
- 第1組捕獲1或0 -
, .
, /
或空間 \\d{3}
- 任意3位數 \\1
- 與第1組中捕獲的值相同 \\d{4}
- 任何4位數字 $
- 字符串結尾(或者您可能希望使用\\z
來確保字符串的確切結束,但在大多數情況下並不是必需的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.