Regex 用于黑名单和白名单单词的正则表达式
我试图为黑名单和白名单设置regex,标记黑名单上的单词,忽略白名单上的单词。规则如下:Regex 用于黑名单和白名单单词的正则表达式,regex,blacklist,Regex,Blacklist,我试图为黑名单和白名单设置regex,标记黑名单上的单词,忽略白名单上的单词。规则如下: 我想看看输入字符串中是否存在黑名单上的单词或短语 黑名单中的单词应该匹配,无论它们出现在哪里(完整单词或作为子字符串) 如果白名单单词(即,即使包含黑名单单词,也被认为没有问题的单词)仅为完整单词,则不进行匹配 我想搜索并匹配的黑名单单词:兔子、花园、洞 白名单上的词是干净的,可以忽略,即使它们包含黑名单上的词:整体,园丁 我使用负回溯生成了以下正则表达式: (兔子|花园|洞)( 我愚蠢的示例字符串: 这整
(兔子|花园|洞)(
我愚蠢的示例字符串:
这整个洞是园丁阿加登纳犯的一个大错
我希望只有以下几点可以匹配:
“洞”
“哇”
“阿加登纳”
它主要起作用,因为“整体”不匹配,但“wholey”匹配,而“agardener”也匹配。然而,“gardener”匹配,即使它在白名单中。我缺少什么?您可以使用
\w*(?:兔子|花园|洞)\w*\b(?)?
看
一种没有后视但具有前视的变体:
\b(?(?:整个园丁)\b)\w*(?:兔子|花园|洞)\w*\b
看
详情:
\w*
-零个或多个字字符
(?:BUNNY | GARDEN | HOLE)
-所需单词部分之一
\w*
-零个或多个字字符
\b
-单词边界
(?-如果左侧的整词是整词
或园丁
,则会导致匹配失败的负面查找
\b(?((?:整型|园丁)\b)\w*(?:BUNNY | GARDEN | HOLE)\w*\b
首先匹配单词边界,然后如果下一个字符是整型
或园丁
整型单词,然后将单词与BUNNY
、GARDEN
或HOLE
子字符串匹配,则匹配失败
将\w
替换为[a-zA-Z]
或\p{L}
(或[:alpha:][/code>),如果支持,您只需要匹配字母词。(\bBUNNY\b|b\bGARDEN\b|bHOLE\b)
?首先,您需要澄清“黑名单”的含义根据定义,如果它不在你的白名单上,它就不会匹配。那么你黑名单上的单词和两个名单上的单词有什么区别呢?如果我们可以忽略黑名单,这样的事情适合你的目的吗?\b(BUNNY | GARDEN | HOLE)\b
谢谢@Charlie Armstrong的输入。我更新了问题。我试图确定输入字符串中是否存在黑名单字,但如果黑名单字是白名单字的一部分,请忽略该匹配。