html 清空查询条件,如何删除所有条件HTML注释?

这是关于(f)lex正则表达式的两个重要事实。 (有关Flex模式的完整文档,请参见flex manual。该部分不太长。)

在(f)lex中,.通配符匹配除换行符之外的任何。换句话说,它等效于[^\n]。因此"

(F)lex不提供非贪婪重复(*?)。所有重复都延伸到最长的匹配项。因此,(.*?)-->将与该行的最后一个-->匹配,(.|\n)*?-->将与该文件的最后一个-->匹配。

尽管有点杂乱,但可以编写一个满足您需要的正则表达式:

如果我们仅将诱人的--[^>]写为第三种选择,则--->将不会被视为终止模式,因为---将与--[^>]匹配(破折号不是直角括号),然后>将与[^-]匹配,并且扫描将继续。添加+来匹配更长的破折号是不够的,因为(f)lex像许多正则表达式引擎一样,正在寻找最长的整体匹配,而不是每组替代中最长的子匹配。因此,我们需要编写--+[^->],它不能匹配---。

如果不清楚-我可以理解为什么不会-您可以改用start condition来编写一套简单得多的模式:

%x COMMENT

%%

"" { BEGIN(INITIAL); }

[^-]+ ;

.|\n ;

}

第二条规则实际上只是一个效率漏洞;这样可以避免对每个角色触发不操作动作。有了第二条规则,最后一条规则实际上只能匹配单个-,因此可以这样写。但是完整编写它可以使您删除第二条规则,并向自己证明没有第二条规则即可。

按这样的方式匹配注释的关键见解是(f)lex总是选择最长的匹配,这在某种程度上类似于非贪婪匹配的目标。在起始条件之内,-仅在不能成为更长的-->匹配项的一部分时,才匹配单字符回退规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值