一个正则表达式,永远不会与任何事物匹配

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


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


编辑:为什么我要这个?好吧,首先是因为我觉得思考这样的表达式很有趣,其次是因为我在脚本中需要它。


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


基于该字典,我创建了全部使用此字典作为其工作方式参考的方法,其中一种将正则表达式与已解析的日志文件进行匹配。


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


向该组添加了其他所有不匹配的内容。但是,为了防止日志消息的“未知”表达式不匹配(偶然),我必须创建一个表达式,该表达式无论从我提供的字符串来看,都绝不会匹配。


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


慕工程0101907
浏览 620回答 3
3回答

长风秋雁

这实际上很简单,尽管它取决于实现/标志 *:$a将a在字符串末尾匹配一个字符。祝好运。警告:此表达式很昂贵-它会扫描整行,找到行尾锚,然后才找到a并返回负匹配。(有关更多详细信息,请参见下面的评论。)*最初,我对多行模式正则表达式没有多加考虑,因为它$也与行尾匹配。实际上,它将与换行符之前的空字符串匹配,因此,像这样的普通字符a永远不会出现在之后$。

慕婉清6462132

杠杆作用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

慕盖茨4494581

环视四周:(?=a)b对于正则表达式新手:正面看(?=a)要确保下一个字符为a,但不更改搜索位置(或在匹配的字符串中包含“ a”)。现在,确认下一个字符为a,b仅当下一个字符为时,regex()的其余部分才匹配b。因此,此正则表达式匹配只有一个字符既a与b在同一时间。
打开App,查看更多内容
随时随地看视频慕课网APP