我正在使用加载文件并尝试编写一个正则表达式,它将检查文件中没有正确数量的分隔符的任何行。让我们假设分隔符是%(我不确定此文本字段是否支持加载文件中的分隔符)。我写的正则表达式找到了所有正确的行:
^%([^%]*%){20}$
有时找到没有正确数量分隔符的行更有利,所以为了实现这一点,我写道:
(^%([^%]*%){0,19}$)|(^%([^%]*%){21,}$)
我很担心这个(以及我一般写的任何正则表达式)的效率,所以我想知道是否有更好的方法来编写它,或者我写它的方式是否正常。我想也许会有一些方法来使用重复令牌的交替,例如:
{0,19}|{21,}
但这似乎不起作用。
如果知道有用,我只是搜索Sublime Text中的文件,我相信它使用PCRE。我也对第一个正则表达式更好的建议持开放态度,尽管我发现即使在特别大的加载文件中也能很好地工作。
答案 0 :(得分:1)
如果您的正则表达式引擎支持否定前瞻,您可以稍微修改原始正则表达式。
^(?!%([^%]*%){20}$)
上面的正则表达式仅对测试有用。如果要捕获,则需要添加.*
部分。
^(?!%([^%]*%){20}$).*$