廢話不多說,直接上內容
使用Regex.Match()方法的時候,想匹配一個子串,但是要匹配的內容可能在我加載的資源中出現換行,比如我的資源內容為john \r\n smith,我想把john smith匹配出來。
1. 正則表達式中點號(.)代表除了\n以外的所有字符,但是這僅限於在中括號外使用([]),如果在中括號內使用,就僅代表點號本身,所以這個正則可以寫為 "john(.|\n)*?smith"。
2. 正則表達式中\s代表包含制表(\t),換行,空格的所有空白字符,\S代表不包含制表,換行,空格的所有非空白字符,那么這2個自由組合就可得到所有字符,所以可以這么寫"john[\s\S]*?smith",
3. C#正則表達式namespace中Regex.Match()方法接收第3個參數,這個參數是一個RegexOptions枚舉,經過我的試驗,發現我要匹配換行和回車的內容的時候,把第3個參數指定為RegexOptions.SingleLine,在正則中可以寫"john.*?smith",一樣能匹配成功。所以這也作為1種方法吧,猜測是增強了點號的匹配效果,比如說能匹配\n(當然只是1種猜測,檢測可以在字符串中加入單獨的\n,不要\r,也能匹配出結果)
注:1中使用小括號,用或連接, 2中使用中括號,中括號內的正則自動選擇。
\r 回車 code=13 return (弱智的理解為光標移動到本行的起始位置,即Y坐標不變)
\n 換行code=10 newline (弱智的理解為光標移動到下一行的x坐標不變的位置)
在windows OS下,我們鍵盤上的enter鍵執行了 \r\n 的操作,但是在Linux下只有 \n 的操作。因此代碼中需要注意下。
《完》