为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕工程0101907 2019-10-17 14:48:01

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


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


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


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


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


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


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


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


查看完整描述

3 回答

?
慕慕0277861

这实际上很简单,尽管它取决于实现/标志 *:


$a

将a在字符串末尾匹配一个字符。祝好运。


警告:

此表达式很昂贵-它会扫描整行,找到行尾锚,然后才找到a并返回负匹配。(有关更多详细信息,请参见下面的评论。)


*最初,我对多行模式正则表达式没有多加考虑,因为它$也与行尾匹配。实际上,它将与换行符之前的空字符串匹配,因此,像这样的普通字符a永远不会出现在之后$。


查看完整回答
反对 回复 2019-10-17
?
慕婉清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


查看完整回答
反对 回复 2019-10-17
?
慕盖茨4494581

环视四周:


(?=a)b


对于正则表达式新手:正面看(?=a)要确保下一个字符为a,但不更改搜索位置(或在匹配的字符串中包含“ a”)。现在,确认下一个字符为a,b仅当下一个字符为时,regex()的其余部分才匹配b。因此,此正则表达式匹配只有一个字符既a与b在同一时间。


查看完整回答
反对 回复 2019-10-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信