环视

-- Start

假设让你在一个文件中查找一下 u 后面不是 x 的单词,怎么办? 一个很自然的想法是用下面的正则表达式来查找:

u[^x]

不过遗憾的是,你很可能漏掉了部分单词,啊? 是吗? 我怎么没看出问题来呢? 到底会漏掉什么样的单词呢? 呵呵,如果 you 这个单词出现在一行的末尾,试一试,你还能用这个表达式搜索出来吗? 记住排除型字符组的意思是匹配一个未列出的字符,而不是不要匹配列出的字符

那么正确的做法是什么呢? 试一试下面的表达式吧。

u(?!x)

这个表达式是什么意思呢?它的意思是匹配字母 u, 且 u 的右边不是 x。那我想查找 u 后面是 x 的单词该怎么办呢?试一试下面的表达式吧:

u(?=x)

那我想查找 u 前面是 x 的单词该怎么办呢?试一试下面的表达式吧:

(?<=x)u

那我想查找 u 前面不是 x 的单词该怎么办呢?试一试下面的表达式吧:

(?<!x)u

呵呵,是不是有点糊涂啊。再看一遍。我们把这四个元字符称为环视(lookaround),它们和我们之前学过的单词分界符,行的起始和结束符一样,它们只匹配位置,而不匹配具体的字符,了解这一点很重要。恭喜你,你又学会了四个非常强悍的正则表达式元字符。

元字符名称匹配对象
.点号(dot)单个任意字符
[...]字符组(Character Class)列出的任意字符
[^...]排除型字符组(Negated Character Class)未列出的任意字符
^脱字符(caret)行的起始位置
$美元符(dollar)行的结束位置
\< 单词的起始位置
\> 单词的结束位置
\bBoundary单词边界
\B 非单词边界
(?=...)肯定顺序环视(Positive Lookahead)成功如果右边能够匹配
(?!...)否定顺序环视(Negative Lookahead)成功如果右边不能够匹配
(?<=...)肯定逆序环视(Positive Lookbehind)成功如果左边能够匹配
(?<!...)否定逆序环视(Negative Lookbehind)成功如果左边不能够匹配
|竖线(bar)匹配分割两边的任意一个表达式

---更多参见:正则表达式精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-05-12
-- Written by ShangBo on 2012-04-21
-- End


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
环视拼接(Panorama stitching)是一种将多张照片拼接在一起形成全景图像的技术。GitHub作为全球最大的开源软件开发平台,通过GitHub,可以方便地找到环视拼接的相关开源项目和代码。 首先,我们可以通过在GitHub上搜索关键词“Panorama stitching”或者“环视拼接”来找到相关的开源项目。在搜索结果中,我们可以看到很多优秀的项目,如OpenCV、PTGui、Hugin等,这些项目提供了丰富的功能和算法来实现环视拼接。 其次,通过查看项目的文档和代码,可以了解到不同项目的特点和使用方法。在GitHub上,很多项目都提供了详细的说明文档和示例代码,这些文档可以帮助我们学习如何使用特定的环视拼接算法和工具。 另外,GitHub还提供了开发者们互相交流的平台。在项目的Issue页面,可以看到开发者们的讨论和问题解答。这些讨论可以帮助我们更好地理解环视拼接的原理和实现细节,并且我们也可以通过提出问题和参与讨论来与其他开发者一起进步。 最后,通过GitHub的Fork功能,我们可以直接在自己的账户下复制一份项目代码,并在此基础上进行修改和拓展。这使得我们能够更加自由地定制环视拼接的功能,满足自己特定的需求。 总之,通过GitHub,我们可以方便地找到环视拼接的开源项目和代码,并通过学习、交流和修改来实现自己的需求。GitHub为开发者们提供了一个共享、学习和创造的平台,使环视拼接的技术更加普及和发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值