《正则表达式经典实例(第2版)》——2.22 把匹配上下文插入到替代文本中

2.22 把匹配上下文插入到替代文本中

问题描述
创建一个替代文本,用来把正则表达式匹配的文本替换为匹配之前的文本紧跟完整目标文本再紧跟匹配之后的文本。例如,如果在BeforeMatchAfter中找到的是Match,那么把这个匹配换成BeforeBeforeMatchAfterAfter,最终得到的新文本是BeforeBefore BeforeMatchAfterAfterAfter。

解决方案

$`$_$'
替代文本流派:.NET、Perl
\`\`\&\'\'
替代文本流派:Ruby
$`$`$&$'$'
替代文本流派:JavaScript

讨论
上下文(context)这个术语,指的是正则表达式所应用于的目标文本。总共存在3种上下文:正则匹配之前的目标文本、正则匹配之后的目标文本以及整个目标文本。在匹配之前的文本有时候被称作左上下文(left context),而匹配之后的文本则相应地被称作右上下文(right context)。整个目标文本则是左上下文、匹配再加右上下文。

.NET和Perl支持使用和«$_»来把所有3种形式的上下文插入到替代文本中。事实上,在Perl中每次成功的正则匹配之后都会赋值给这些变量,并且可以在任何代码中使用,直到遇到下一次匹配尝试。“美元符号+反引号”对应左上下文。在标准美式键盘上,你可以按键盘左上角1键左边的键来输入反引号。“美元符号+垂直引号”对应右上下文。垂直引号也就是通常的单引号。在标准美式键盘上,它位于分号和回车键(Enter)之间。“美元符号+下划线”是整个目标文本。与.NET和Perl类似,JavaScript也使用« $` »和« $' »来代表左、右上下文。然而,JavaScript并没有提供单个记号用于插入整个目标文本。你可以自己重构目标文本,把整个正则匹配通过« $& »添加到左、右上下文之间即可。

Ruby通过«`»和«'»支持左、右上下文,并且使用«&»来插入整个正则匹配。与JavaScript一样,Ruby中也不存在插入整个目标文本的记号。

时间: 2024-11-01 18:32:26

《正则表达式经典实例(第2版)》——2.22 把匹配上下文插入到替代文本中的相关文章

《正则表达式经典实例(第2版)》——导读

** 前言 **正则表达式在过去十多年间越来越普及.如今,所有常用的编程语言都会包含一个强大的正则表达式函数库,甚至在语言本身就内嵌了对于正则表达式的支持.许多开发人员都会利用这些正则表达式的功能,在应用程序中为用户提供使用正则表达式对其数据进行查找或者过滤的能力.正则表达式已经无处不在.随着正则表达式的广泛采用,出现了许多相关的著作.其中大多数都很好地讲解了正则表达式的语法,并且还会提供一些例子以及参考实现.然而,我们还没有看到有任何一本书能够针对处理计算机和不同因特网应用上的文本所遇到的各种

《正则表达式经典实例(第2版)》——2.9 分组和捕获匹配中的子串

2.9 分组和捕获匹配中的子串 问题描述 改进匹配Mary.Jane或Sue的正则表达式,使之只能匹配完整单词.使用分组来实现这个功能,整个正则表达式只需要一对单词分界符,而不是给每个选择分支都使用一对分界符. 创建一个正则表达式,使之匹配yyyy-mm-dd格式的任意日期,并且分别捕获年.月和日.目标是在处理匹配的代码中可以更容易处理这些分别捕获的值.你可以假设目标文本中的所有日期都是合法的.正则表达式不必要考虑去掉像9999-99-99这样的非法数据,因为它们根本不可能出现在目标文本中. 解

《正则表达式经典实例(第2版)》——1.2 使用正则表达式进行查找和替换

1.2 使用正则表达式进行查找和替换 查找和替换(search-and-replace)对正则表达式来说是一个常见的任务.查找和替换的功能会接受一个目标字符串.一个正则表达式和一个替代字符串作为输入.它的输出则是把目标字符串中所有与正则表达式相匹配的字符串都替换为"替代文本". 虽然替代文本(replacement text)并不是一个正则表达式,读者也可以使用某些特殊的语法构造动态的替代文本.所有的流派都允许把正则表达式或者某个捕获分组匹配到的文本,重新添加到替代字符串中.实例2.2

《正则表达式经典实例(第2版)》——2.21 把部分的正则匹配添加到替代文本中

2.21 把部分的正则匹配添加到替代文本中 问题描述匹配任意10个数字的连续序列,如1234567890.并把这个序列转换成(美国)电话号码的常见格式,如(123) 456-7890, 解决方案正则表达式 \b(\d{3})(\d{3})(\d{4})\b 正则选项:无 正则流派:.NET.Java.JavaScript.PCRE.Perl.Python.Ruby 替代文本 ($1)●$2-$3 替代文本流派:.NET.Java.JavaScript.PHP.Perl (${1})●${2}-$

《正则表达式经典实例(第2版)》——2.20 在替代文本中添加正则匹配

2.20 在替代文本中添加正则匹配 问题描述 执行查找和替换,把所有URL都转换成指向该URL的HTML链接,并使用该URL作为链接的文本.在这个练习中,把URL定义为"http:"以及其后所有的非空字符.例如,Please visit应该被转换为Please visit. 解决方案 正则表达式 http:\S+ 正则选项:无 正则流派:.NET.Java.JavaScript.PCRE.Perl.Python.Ruby 替代文本 <a●href="$&&quo

《正则表达式经典实例(第2版)》——1.3 正则表达式工具

1.3 正则表达式工具 除非已经拥有了相当长的使用正则表达式编程的经验,否则建议你先在一个工具中试验一下正则表达式,而不是直接在源代码中使用它们.本章和第2章中提供的正则表达式示例都是原始正则表达式,其中并不包含编程语言(即使是Unlx shell)所必需的额外的转义符号.因此可以直接把这些正则表达式输入到一个应用程序的查找框中. 第3章讲解如何把正则表达式整合到源代码中.把一个字面的(literal)正则表达式作为一个字符串引用,会让它更加难懂,因为字符串的转义规则会与正则表达式的转义规则混杂

《正则表达式经典实例(第2版)》——2.19 在替代文本中添加字面文本

2.19 在替代文本中添加字面文本 问题描述查找并把任何正则表达式匹配从字面上替换为这8个字符:$%*$11. 解决方案 $%\*$$1\1 替代文本流派:.NET.JavaScript \$%\\*\$1\\1 替代文本流派:Java $%\*\$1\\1 替代文本流派:PHP \$%\*\$1\\1 替代文本流派:Perl $%\*$1\\1 替代文本流派:Python.Ruby 讨论在替代文本中转义字符的时机和方式这个实例显示了各种替代文本流派中使用的不同转义规则.在替代文本中,你可能会需

《正则表达式经典实例(第2版)》——第 1 章 正则表达式简介 1.1正则表达式的定义

第 1 章 正则表达式简介 在你打开这本书的时候,很可能已经热切地期望,要在代码中插入本书中找到的那些包含诸多括号和问号的古怪字符串了.如果你已经准备好要"即查即用",我们非常欢迎,第4-9章中会列出并讲解了各种实用的正则表达式. 但是如果阅读本书的前几章,你将为未来节省大量的时间.例如,本章会向读者介绍许多工具-其中一些工具是本书作者之一的Jan所开发的,这些工具可以帮你事先测试和调试正则表达式,而不用等到把它们塞到代码中之后再处理,那时候查找错误就非常困难了.而且开始这几章还会展示

《正则表达式经典实例(第2版)》——2.14 消除不必要的回溯

2.14 消除不必要的回溯 问题描述上一个实例解释了贪心和懒惰量词之间的区别,以及它们是如何进行回溯的.在有些情形下,这种回溯是不必要的. ‹bd+b›使用了一个贪心量词,而‹bd+?b›使用的是懒惰量词.它们都会匹配相同的内容:一个整数.如果给它们同样的目标文本,它们都会找到完全一样的匹配.在这里所做的任何回溯都是不必要的.试着改写这个正则表达式,明确地消除所有回溯,使正则表达式更加高效. 解决方案 \b\d++\b 正则选项:无 正则流派:Java.PCRE.Perl 5.10.Ruby 1