首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >黑名单和白名单词的Regex

黑名单和白名单词的Regex
EN

Stack Overflow用户
提问于 2021-02-01 21:19:16
回答 1查看 1.5K关注 0票数 0

我正试图为黑名单和白名单设置正则表达式,标记黑名单上的单词,忽略白名单上的单词。以下是规则:

  1. 我想看看黑名单上的单词或短语是否存在于输入字符串中。
  2. 黑名单上的单词无论出现在哪里都应该匹配(完整单词或子字符串)。
  3. 白名单词(即已知的单词,即使它们包含黑名单上的单词)是不匹配的,如果它们是完整的单词。

黑名单上的单词,我想搜索和匹配,如果发现:兔子,花园,洞

白名单上的单词是干净的,可以忽略,即使它们包含黑名单上的单词:整个,园丁

我使用负lookbehind做了以下正则表达式:(BUNNY|GARDEN|HOLE)(?<!\bWHOLE\b|\bGARDENER\b)

我愚蠢的例子:这整个洞是园丁的一个完整的错误。

我认为只有以下几点是匹配的:“洞”“整体”“阿加登纳”

它主要起作用,因为“整体”不匹配,而“整体”是匹配的,“整体”也是匹配的。然而,“园丁”的匹配,即使是在白名单。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-01 21:54:30

您可以使用

代码语言:javascript
运行
复制
\w*(?:BUNNY|GARDEN|HOLE)\w*\b(?<!\bWHOLE|\bGARDENER)

regex演示

一种没有回头看,但具有前瞻性的变体:

代码语言:javascript
运行
复制
\b(?!(?:WHOLE|GARDENER)\b)\w*(?:BUNNY|GARDEN|HOLE)\w*\b

这个regex演示

详细信息

  • \w* -零或多个单词字符
  • (?:BUNNY|GARDEN|HOLE) -必要的单词部分之一
  • \w* -零或多个单词字符
  • \b -一个单词边界
  • (?<!\bWHOLE|\bGARDENER) -如果位于左侧的整个单词是WHOLEGARDENER,则负面查找将使匹配失败。

\b(?!(?:WHOLE|GARDENER)\b)\w*(?:BUNNY|GARDEN|HOLE)\w*\b首先匹配单词边界,然后如果下一个字符是WHOLEGARDENER整体单词,则匹配失败,然后匹配包含BUNNYGARDENHOLE子字符串的单词。

\w替换为[a-zA-Z]\p{L} (或[[:alpha:]]) (如果支持的话),并且只需要匹配字母单词。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66000286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档