C# Regex正則匹配所有字符(遇到換行回車\r\n問題)


廢話不多說,直接上內容

使用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 的操作。因此代碼中需要注意下。

 

 

 

 

《完》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM