簡體   English   中英

正則表達式選項“Multiline”

[英]Regex option “Multiline”

我有一個正則表達式匹配日期格式與逗號。

yyyy / mm / dd或yyyy / mm

例如:

2016/09 / 02,2016 / 08,2016 / 9月30日

我的代碼:

string data="21535300/11/11\n";
Regex reg = new Regex(@"^(20\d{2}/(0[1-9]|1[012])(/(0[1-9]|[12]\d|30|31))?,?)*$", 
                      RegexOptions.Multiline);

if (!reg.IsMatch(data))
    "Error".Dump();
else
    "True".Dump();

我使用選項多線。 如果字符串數據有“\\ n”。 任何角色都會匹配此正則表達式。

例如:

string data="test\n"
string data="2100/1/1"

我在MSDN中找到了選項定義 它說:

它改變了^和$語言元素的解釋,使它們匹配行的開頭和結尾,而不是輸入字符串的開頭和結尾。

我不明白為什么會出現這個問題。 有人可以解釋一下嗎? 謝謝。

您的正則表達式可以匹配在字符串末尾添加換行符后得到的空行。 "test\\n"包含2行,第二行匹配。

以自由間距模式查看正則表達式模式:

^                 # Matches the start of a line
 (                # Start of Group 1
   20\d{2}/
   (0[1-9]|1[012])
   (/
     (0[1-9]|[12]\d|30|31)
   )?,?
 )*                # End of group 1 - * quantifier makes it match 0+ times
$                  # End of line

如果您不希望它與空行匹配,請將最后一個)*替換為)+

另一種方法是使用更多展開的模式

^20\d{2}/(0[1-9]|1[012])(/(0[1-9]|[12]\d|3[01]))?(,20\d{2}/(0[1-9]|1[012])(/(0[1-9]|[12]\d|3[01]))?)*$

請參閱正則表達式演示 在代碼內部,建議使用塊並動態構建模式:

string date = @"20\d{2}/(0[1-9]|1[012])(/(0[1-9]|[12]\d|3[01]))?";
Regex reg = new Regex(string.Format("^{0}(,{0})*$", date), RegexOptions.Multiline);

正如您所看到的,第一個塊(在行^錨點之后)是強制性的 ,因此空行永遠不會匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM