正则表达式

正则表达式 知识量:10 - 22 - 55

1.2 如何使用><

执行搜索- 1.2.1 -

搜索是正则表达式最重要的功能,而且其优势也在于精确而多样化的搜索。

例如要搜索单词“man”,这需要排除“Man”、“MAN”、“MaN”等之类的词,还要排除像“human”、“woman”、“manage”等之类的词,前一种操作比较容易实现,而后一种相对就比较复杂和困难,正则表达式可以很好的解决这个问题。

在具体应用中,“相等”(=)比较其实也是搜索操作,这会对用户提供的整个字符串进行搜索以寻找一个匹配。

执行替换- 1.2.2 -

执行文本替换是正则表达式的另一项重要能力。如果要格式化一段文本中的一部分,找到这部分只是工作的第一步,找到后按照设定的格式进行文本替换才真正体现了正则表达式的威力。

例如:找到所有的手机号码,给它们全部加上国家代码。或者找到URL地址,将其转换为超级链接。

总之,以往使用普通文本处理函数进行的文本操作,使用正则表达式来做将会变得十分的简单。

测试环境- 1.2.3 -

由于正则表达式语言不是可以直接运行的语言,因此要测试和练习正则表达式需要借助其他语言,以下是部分主流编程语言支持正则表达式的一些函数。

1、JavaScript

在String和RegEx对象的以下方法中实现正则表达式的处理。

  • match:用来匹配一个字符串的String方法。

  • replace:用来完成替换操作的String方法。

  • search:用来测试在某个给定字符串里是否存在着一个匹配的String方法。

  • split:用来把一个字符串拆分为多个子字符串的String方法。

  • exec:用来搜索一个匹配的RegEx方法。

  • test:用来测试在某个给定字符串里是否存在着一个匹配的RegEx方法。

需要注意的是:

  • JavaScript提供了一个名为RegExp的全局对象,可以通过它获得与本次执行有关的信息。

  • JavaScript不支持POSIX字符类。

  • JavaScript不支持\A和\Z。

2、ASP

正则表达式的支持通过名为RegExp的对象实现。

  • Excute():执行一个正则表达式搜索操作。

  • Replace():执行一个搜索和替换操作。

  • Test():检查一个字符串是否与一个给定的正则表达式相匹配。

需要注意的是:

  • 在执行上述方法之前,必须先创建并填充一个RegExp对象的实例。

  • 正则表达式存放在RegExp.Pattern里。

  • 支持全局限定符和大小写限定符。全局限定符是一个存放在RegExp.Global里的布尔值;大小写限定符是一个存放在RegExp.IgnoreCase里的布尔值。

  • Excute()方法返回一个Match对象,通过它可以访问所有的匹配。

  • 不支持向前查找和向后查找。

3、.NET(适用于ASP.NET、C#和.NET等)

.NET通过Regex类提供正则表达式支持。

  • IsMatch():测试在某个给定的字符串里是否可以找到一个匹配。

  • Match():搜索一个单个匹配,该匹配将成为一个Match对象。

  • Matches():搜索所有匹配,返回一个Match-Collection对象。

  • Replace():在给定的字符串上进行替换操作。

  • Split():把一个字符串拆分为一个字符串数组。

需要注意的是:

  • 使用正则表达式前,必须用Imports System.Text.Regu-lar-Expressions语句导入正则表达式对象。

  • 不支持\E、\l、\L、\u、和\U进行大小写转换。

  • 不支持POSIX字符类。

4、PHP

通过PCRE组件提供正则表达式支持。

  • preg_grep():进行一次搜索,匹配结果作为数组返回。

  • preg_match():进行一次正则表达式搜索,返回第一个匹配。

  • preg_match_all():进行一次正则表达式搜索,返回所有的匹配。

  • preg_quote():输入的参数是一个模式,返回值是该模式的转义版本。

  • preg_replace():进行一次搜索并替换的操作。

  • preg_replace_callback():进行一次搜索并替换操作,但使用一个回调函数来完成实际替换动作。

  • preg_split():把一个字符串拆分成子字符串。

需要注意的是:

  • 默认不区分字母大小写,如果想要区分大小写,必须使用i限定符。

  • 默认只匹配单行字符串,如果想要匹配多行,必须使用m限定符。

  • 不支持\l、\u、\L、\U、\Q和\v。

5、Java

  • find():在一个字符串里寻找一个给定模式的匹配。

  • lookingAt():用一个给定的模式去尝试匹配一个字符串的开头。

  • matches():用一个给定的模式去尝试匹配一个完整的字符串。

  • replaceAll():进行替换操作,对所有匹配都进行替换。

  • replaceFirst():进行替换操作,只对第一个匹配进行替换。

需要注意的是:

  • 使用正则表达式前,必须先导入正则表达式组件。

  • 不支持嵌入条件。

  • 不支持使用\E、\l、\L、\u和\U进行字母大小写转换。

  • 不支持使用[\b]匹配退格符。

  • 不支持\z。

6、Perl

  • m/pattern/:匹配给定的模式。

  • s/pattern/pattern/:执行一个替换操作。

  • qr/pattern/:返回一个Regex对象供以后使用。

  • split():把一个字符串拆分为子字符串。

需要注意的是:

  • 可以把限定符放在模式的后面。\i用来表明在搜索时不区分字母大小写;\g用来表明进行全局搜索(找出所有匹配)。

7、MySQL

通过where子句中的 regexp"正则表达式" 语句实现。详见“MySQL正则表达式”

需要注意的是:

  • 只能搜索,不能替换。

  • 默认不区分字母大小写,如果需要区分,使用binary关键字。

  • 不支持向前预测。

  • 不支持嵌入条件。

  • 不支持八进制字符搜索。

  • 不支持\a、\b、\e、\f和\v。

  • 不支持回溯引用。