正则表达式——常见应用软件和编程语言中的正则表达式

常见应用软件和编程语言中的正则表达式

1、grep

grep是一种用来对文件或标准输入文本进行文字搜索的Unix工具。根据你具体使用的命令选项,grep支持基本、扩展和Perl正则表达式。

  • -E:使用扩展正则表达式。
  • -G:使用基本正则表达式。
  • -P:使用Perl正则表达式。

提示 你使用的命令选项不同,grep工具的功能和用途也就不同。大多数用户喜欢使用Perl正则表达式(见稍后的描述)​,因为这些是最标准的。

请注意以下事项:

  • 在默认的情况下,grep将把包含着匹配的各个文本行全部显示出来;如果你只想查看匹配结果,请使用-o选项。
  • 使用-v选项将对整个匹配操作进行求非------只显示不匹配的文本行。
  • 使用-c选项将只显示匹配的总数而不是次匹配的细节。
  • grep工具只能用来进行搜索操作,不能用来进行替换操作。换句话说,grep工具不支持替换功能。

2、JavaScript

JavaScript 1.x版本在String和RegEx对象的以下几个方法里实现了正则表达式处理。

  • exec:一个用来搜索一个匹配的RegEx方法。
  • match:一个用来匹配一个字符串的String方法。
  • replace:一个用来完成替换操作的String方法。
  • search:一个用来测试在某给定字符串里是否存在着一个匹配的String方法。
  • split:一个用来把一个字符串拆分为多个子串的String方法。
  • `test:一个用来测试在某给定字符串里是否存在着一个匹配的RegEx方法。

注意 JavaScript 2里的正则表达式处理(Mozilla和另外几种比较新的浏览器可以支持)与JavaScript 1.x向后兼容并提供了更多的功能。

JavaScript对正则表达式的支持源自Perl语言,但需要注意以下几个问题:

  • JavaScript使用命令行选项来管理全局的区分大小写搜索:g选项激活全局搜索功能,i选项让匹配操作不区分字母的大小写,这两个选项可以组合为gi
  • 其他命令行选项(版本4及以后的浏览器支持)包括:m,支持多行字符串;s,支持单行字符串;x,忽略正则表达式模式里的空白字符。
  • 在使用回溯引用的时候,$'将返回被匹配字符串前面的所有东西,\`将返回被匹配字符串后面的所有东西,`+将返回最后一个被匹配的子表达式,$&`将返回被匹配到的所有东西。
  • JavaScript提供了一个名为RegExp的全局对象,在执行完一个正则表达式之后,你们可以通过这个对象获得与这次执行有关的信息。
  • JavaScript不支持POSIX字符类。
  • JavaScript不支持\A和\Z。

3、MySQL

MySQL是一个流行的开放源代码数据库软件。MySQL率先提供了正则表达式支持作为一种数据库搜索手段,这一点我们在其他数据库系统里还没有见过。

MySQL对正则表达式的支持体现在允许在WHERE子句里使用如下格式的表达式:

js 复制代码
REGEXP "expression"

注意 下面是一条使用了正则表达式的MySQL语句的完整语法:

sql 复制代码
SELECT * 
FROM table 
WHERE REGEXP "pattern"

MySQL正则表达式支持很有用,功能也很强大,但它还算不上是一个完备的正则表达式实现。

  • 只提供了搜索支持,不支持使用正则表达式进行替换操作。
  • 在默认的情况下,正则表达式搜索不区分字母的大小写。如果需要区分字母的大小写,必须再增加一个BINARY关键字(放在REGEXP和模式之间)。
  • \[:\<:]来匹配一个单词的开头,用\[:\>:]来匹配一个单词的结束。
  • 不支持向前预测。
  • 不支持嵌入条件。
  • 不支持八进制字符搜索。
  • 不支持\a、\b、\e、\f和\v。
  • 不支持回溯引用。

4、Perl

Perl可以说是各种正则表达式实现的"祖宗"​,其他各种实现几乎都与Perl相兼容。

正则表达式支持是Perl的核心组件之一。如果需要在Perl脚本里使用正则表达式,只要像下面这样给出一个操作和相应的模式即可。

  • m/pattern/ 匹配给定的模式。
  • s/ pattern/pattern/ 执行一个替换操作。
  • qr/pattern/ 返回一个Regex对象供今后使用。
  • split( )把一个字符串拆分为子字符串。

下面是一些与Perl正则表达式有关的注意事项。

  • 允许把限定符放在模式的后面。\i用来表明在搜索时不区分字母的大小写;\g用来表明进行全局搜索(把所有的匹配都找出来)。
  • 在使用"回溯引用"的时候,'将返回被匹配字符串前面的所有东西,`将返回被匹配字符串后面的所有东西,+将返回最后一个被匹配的子表达式,&将返回整个被匹配字符串。

5、PHP

PHP通过它的PCRE组件提供了与Perl相兼容的正则表达式支持。

注意 从PHP 4.2.0版本开始,PCRE组件将自动安装。PHP早期版本的用户需要自行编译PHP pcre-regex软件包才能启用正则表达式支持。

下面是PCRE组件提供的一些正则表达式函数。

  • preg_grep( ):进行一次搜索,匹配结果将作为数组返回。
  • preg_grep( ):进行一次搜索,匹配结果将作为数组返回。
  • preg_match_all( ):进行一次正则表达式搜索,返回所有的匹配。
  • preg_quote( ):这个函数的输入参数是一个模式,返回值是该模式的转义版本。
  • preg_replace( ):进行一次"搜索并替换"操作。
  • preg_replace-callback( ):进行一次"搜索并替换"操作,但使用一个回调(callback)函数来完成实际替换动作。
  • preg_split( ):把一个字符串拆分为子字符串。

请注意以下事项。

  • 在默认的情况下,匹配操作不区分字母的大小写。如果不想区分字母的大小写,必须使用i限定符。
  • 在默认的情况下,匹配操作仅限于单行字符串。如果需要匹配多行字符串,必须使用m限定符。
  • preg_replace( )、preg_replace_callback()和preg_split( )函数都支持一个可选的参数,该参数用来给出一个上限值------对字符串进行替换或拆分的最大次数。
  • 在默认的情况下,匹配操作仅限于单行字符串。如果需要匹配多行字符串,必须使用m限定符。
  • preg_replace( )、preg_replace_callback()和preg_split( )函数都支持一个可选的参数,该参数用来给出一个上限值------对字符串进行替换或拆分的最大次数。
  • preg_grep( )和preg_replace_callback( )是从PHP 4才开始有的,其他函数都是从PHP 3开始就被支持的。
  • 在PHP 4.0.4和更高版本里,回溯引用可以用Perl语言的语法(例如1)来引用;在较早的版本里必须用\来代替$。
  • 不支持\l、\u、\L、\U、\Q和\v。

6、Sun Java

Java对正则表达式的支持是从1.4版本开始的,此前的JRE(Java Runtime Environment, Java运行环境)版本不支持正则表达式。

警告 版本低于1.4的JRE现在仍被广泛地使用着。如果你打算部署一个使用了正则表达式的Java应用程序,千万不要忘记检查JRE的版本。

注意 Sun公司花了很长的时间才在Java里实现了正则表达式支持,而不少软件团队在几年前就开发出了各种非官方的正则表达式实现。因为篇幅的限制,本书没能对那些非官方的Java正则表达式实现进行介绍;以下注意事项只适用于由Sun公司正式发布的Java正则表达式支持。

Java语言中的正则表达式匹配功能主要是通过java.util.regex. Matcher类和以下这些方法实现的。

  • find( ):在一个字符串里寻找一个给定模式的匹配。
  • lookingAt( ):用一个给定的模式去尝试匹配一个字符串的开头。
  • matches( )​:用一个给定的模式去尝试匹配一个完整的字符串。
  • replaceAll( ):进行替换操作,对所有的匹配都进行替换。
  • replaceFirst( ):进行替换操作,只对第一个匹配进行替换。

matcher类还提供了几个能够让程序员对特定操作做出更细致调控的方法。此外,java.util.regex.pattern类也提供了几个简单易用的包装器方法。

  • compile( ):把一个正则表达式编译成一个模式。
  • flags( ):返回某给定模式的匹配标志。
  • matches( ):在功能上等价于刚才介绍的matches( )方法。
  • pattern( ):把一个模式还原为一个正则表达式。
  • split( ):把一个字符串拆分为子字符串。

Sun公司发布的Java正则表达式支持与Perl语言基本兼容,但要注意以下几点。

  • 要想使用正则表达式,必须先用import java.util.regex.语句导入正则表达式组件(这条语句将导入一个完整的软件包。如果你只需要用到其中的一部分功能,请用相应的软件包名字替换掉这条语句里的)。
  • 不支持嵌入条件。
  • 不支持使用\E、\l、\L、\u和\U进行字母大小写转换。
  • 不支持使用\b匹配退格符。
  • 不支持\z。
相关推荐
吴声子夜歌3 小时前
正则表达式——简单的模式匹配
正则表达式
吴声子夜歌8 小时前
正则表达式——前后查找
正则表达式
吴声子夜歌9 小时前
正则表达式参考
正则表达式
吴声子夜歌1 天前
正则表达式——使用子表达式
正则表达式
吴声子夜歌2 天前
正则表达式——重复匹配
正则表达式
吴声子夜歌2 天前
正则表达式——匹配单个字符
正则表达式
吴声子夜歌2 天前
正则表达式——位置匹配
正则表达式
Dawn-bit5 天前
Linux日志处理三剑客之基础篇:(基础正则+扩展正则)
linux·运维·服务器·正则表达式·云计算·运维开发
寒水馨5 天前
macOS下载、安装ripgrep-15.2.0(附安装包ripgrep-15.2.0-aarch64-apple-darwin.tar.gz)
macos·正则表达式·rust·ripgrep·rg·命令行搜索·代码搜索