一个永远不会被任何东西匹配的正则表达式

这可能听起来像一个愚蠢的问题,但我与我的一些开发人员进行了长时间的谈话,听起来像是一件有趣的事情。

所以; 你的想法是什么 - 正则表达式看起来像什么,永远不会被任何字符串匹配!

编辑 :为什么我想要这个? 首先,因为我觉得想到这样一种表达方式很有意思,其次是因为我需要一个脚本。

在该脚本中,我将字典定义为Dictionary<string, Regex> 。 如你所见,它包含一个字符串和一个表达式。

基于该字典,我创建了所有使用此字典的方法作为他们应该如何执行工作的参考,其中一个方法将正则表达式与解析的日志文件相匹配。

如果表达式匹配,则另一个Dictionary<string, long>将添加表达式返回的值。 因此,为了捕获字典中不匹配表达式的日志消息,我创建了一个名为“unknown”的新组。

对这个组添加任何与其他任何不匹配的内容。 但为了防止“未知”表达错误(偶然)一个日志消息,我不得不创建一个绝对不会匹配的表达式,无论我给它什么字符串。

因此,你有这个“不是真正的问题”的理由......


这实际上很简单,虽然它取决于执行/标志*:

$a

在字符串结尾后会匹配一个字符a 。 祝你好运。

警告:
这个表达式很昂贵 - 它会扫描整行,找到行结束符,然后才找到a并返回否定匹配。 (更多细节见下面的评论。)


*最初我对多行模式正则表达式没有太多的想法,其中$也匹配一行的结尾。 事实上,就在新行权前的空字符串匹配,所以像一个普通的字符a可以后不会出现$


利用negative lookahead

>>> import re
>>> x=r'(?!x)x'
>>> r=re.compile(x)
>>> r.match('')
>>> r.match('x')
>>> r.match('y')

这个RE是矛盾的,因此永远不会匹配任何东西。

注意:
在Python中,re.match()隐式地将字符串开头的锚点( A )添加到正则表达式的开头。 这个锚对性能很重要:没有它,整个字符串将被扫描。 那些不使用Python的人会希望显式添加锚点:

A(?!x)x

环视四周:

(?=a)b

对于正则表达式新手:前面的正面看法(?=a)确保下一个字符是a ,但不会更改搜索位置(或者在匹配的字符串中包含'a')。 现在下一个字符被确认为a ,正则表达式( b )的剩余部分仅在下一个字符是b匹配。 因此,这个正则表达式只有在一个字符同时ab时才匹配。

链接地址: http://www.djcxy.com/p/76705.html

上一篇: A Regex that will never be matched by anything

下一篇: How match a regex if it does not contain a particular word?