如何编写匹配不含指定单词段落的正则表达式(规避换行符)
解决方案
要实现匹配不含独立单词cat(包括换行前后的独立cat)的段落,可使用结合负向预查与单行模式的正则表达式:
(?s)(?i)\A(?!.*?(?<=\\b|\\n)cat\\b).*\z
正则各部分说明
(?s):启用单行模式,让.可以匹配换行符,确保能检查整个段落的所有内容(?i):忽略大小写,和原匹配规则保持一致\A和\z:分别匹配整个字符串的开头和结尾,保证我们是对整个段落做判断(?!.*?(?<=\\b|\\n)cat\\b):核心的负向预查逻辑,确保整个段落中不存在任何符合原规则的独立cat单词。.*?是惰性匹配,会遍历段落所有位置检查是否有违规的cat.*:匹配整个段落内容(只有当预查确认没有违规cat时才会执行这一步)
符合预期规则验证
- 含
\ncat\n的内容:预查会检测到独立的cat,正则不匹配,符合要求 - 含
cat的内容:预查检测到独立cat,正则不匹配,符合要求 - 含
cats的内容:原规则不匹配cats,预查无结果,正则匹配整个段落,符合要求 - 含
\ncatss\n的内容:同理,预查无结果,正则匹配,符合要求
内容的提问来源于stack exchange,提问作者Bar Ezra
相关产品推荐
相关产品推荐

