正则表达式的3种匹配模式

正则表达式是处理字符串的常用工具。在C#中,我们一般使用Regex类代表一个正则表达式。一般正则表达式引擎支持以下3种匹配模式:单模(单线)、多行模式(多线)和忽略的情况(忽略大小写)。

1. 单模(单线)
MSDN的定义:更改点 (.) 的含义,要做到这一点,每个字符(不除 \n 此外,每个字符)。
使用单行模式一个典型的场景是在P获取信息。
示例:
我们使用WebBrowser控件,得到以下的HTML源代码,它是存储在变量STR:



Line 1 Line 2

我们要把DIV标签及其内容提取,编写代码如下:

string pattern = @"
.*
"; Regex regex = new 正则表达式(模式) if ((STR) (STR)值 else (错配!");

//结果为:Mismatch!

错误分析:
一般认为,符号(。)是匹配任何单个字符,和(。*)是匹配任何数量的字符。但事实上,点符号不匹配换行符。表达与它等效Windows [ ^ \r\n ]。
我们从中得到的HTML源代码的网站,有极少数的字。单线模式在此时使用,它可以改变符号的意义。修改正则表达式实例构造函数,申报单模式的运用:

string pattern = @"
.*
"; Regex regex = new 正则表达式(模式, ); if ((STR) (STR)值 else (错配!");

结果为:

Line 1 Line 2

嵌入式单模式改:
我们可以直接嵌入在一个正则表达式单行模式:

(?s)
.*

S修饰显示),一个单一的模式应用背后的表达。所以,请不要把它放在最后。除了使用(?- S)封闭的单行模式。

注意:的嵌入式模式的优先级高于regexoptions设置,所以使用(?后的),无论是否使用,按照单模态分析。

2. 多行模式(多线)
MSDN的定义:更改 ^ 和 $ 的含义,他们在任何行线匹配,不只是在开始和结束的字符串匹配。
示例:
这是一个文本文件,每一行是一个用户名,从文件读入变量STR进行处理。内容如下:

二十四画
TerryLee
不满足
Dflying Chen
Rainy
使用博客前身名称

我们想找出一个使用英文字母开头的用户名,编写代码如下:

string pattern = @"^[A-Za-z]+.*";
Regex regex = new 正则表达式(模式)
if ((STR)
  (STR)值
else
  (错配!");

//结果为:Mismatch!

错误分析:

初始锚字符串是否设置?,str的第一个字符是一个中文字,所以,没有。我们可以使用多行模式改变的意义,使其符合每一行的开始,而从整个字符串。
更改代码如下:

string pattern = @"^[A-Za-z]+.*";
Regex regex = new 正则表达式(模式, );
if ((STR)
  (STR)值
else
  (错配!");

//结果为:TerryLee

同时,多行模式也将发生变化的意义,要做到这一点,每一行的结尾,没有结束的字符串。
和(^)和($)是不同的,(一)和Z)不是由多行模式的影响,永远的,开始和结束的字符串。
嵌入式多行模式的改性剂:(?m)与(?-m)

3. Ignorecase(忽略大小写)
MSDN的定义:指定不区分大小写匹配。
这种模式很容易理解,这是相同的大小写字符。我们还在上面的例子。
示例:

string pattern = ^ [A-Z]   *。
Regex regex = new 正则表达式(模式,  | RegexOptions.IgnoreCase);
if ((STR)
  (STR)值
else
  (错配!");

//结果为:TerryLee

分析:请注意正则表达式的使用,我们没有信,但是,与大写字母的名字,这是忽略大小的影响。
忽略嵌入的敏感剂:(?i)与(?-i)

总结:
最后我们用一个表格来总结一下这三个模式

  定义    表达的影响    RegexOptions枚举    嵌入式标识符
单行模式    更改点 (.) 的含义,要做到这一点,每个字符(不除 \n 此外,每个字符)。    .    Singleline    (?s)
多行模式    更改 ^ 和 $ 的含义,他们在任何行线匹配,不只是在开始和结束的字符串匹配。    ^$    Multiline    (?m)
忽略大小写    指定不区分大小写匹配。        IgnoreCase    (?i)

转载自:

发表评论

Close Menu