废话不多说,直接上内容
使用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 的操作。因此代码中需要注意下。
《完》
C# Regex正则匹配所有字符(遇到换行回车\r\n问题)