难以找到插入“排除词”的位置;在正则表达式中

本文关键字:位置 正则表达式 排除词 插入 排除 | 更新日期: 2023-09-27 18:05:08

我知道排除单词的正则表达式,大概是(!?wordToIgnore|wordToIgnore2|wordToIgnore3)

但是我有一个现有的,复杂的正则表达式,我需要添加这个,我有点困惑如何去做。我对正则表达式还是很陌生的,我花了很长时间来制作这个特殊的正则表达式,但我不确定在哪里插入它或如何…

我的正则表达式是…

^(?!.*[ ]{2})(?!.*[']{2})(?!.*[-]{2})(?:[a-zA-Z0-9 ':/'p{L}'-]{1,64}$)$

这应该只允许输入者插入符合该模式的1到64个字母,不能以空格、引号、双引号、特殊字符、破折号、转义字符等开头,只允许大写和小写的a-z,可以包括空格、":"、破折号和引号,但不能在开头。

但是我想禁止他们使用某些单词,所以我有一个我想禁止使用的单词列表,我只是不知道如何让它适合这里…我试着把整个…"block"进去,但没用。

?!the|and|or|a|given|some|that|this|then|than

有人遇到过这种情况吗?

难以找到插入“排除词”的位置;在正则表达式中

首先,祝贺您在尝试构建regex规则方面走了这么远。如果您想阅读有关各种排除的详细信息,我建议您查看除s1, s2, s3等情况外的匹配(或替换)模式

接下来,在您的特殊情况下,以下是我们如何处理您的正则表达式。

  1. 考虑到这一点,让我们让所有的负向查找更紧凑,将它们替换为单个(?!.*(?: |-|'){2})
  2. 在您的字符类中,':只是转义冒号,这是不必要的,因为:已经足够了。我假设你想添加一个反斜杠字符,如果是这样,我们需要使用''
  3. 'p{L}包含[a-zA-Z],因此您可以删除[a-zA-Z]。但是您确定要匹配任何脚本中的所有字母吗?(泰国等)。如果是这样,请记住在regex字符串之后设置u标志。
  4. 对于应用于整个字符串的"坏词排除",将其放置在与其他查找相同的位置,即,在字符串的头部,但使用.*作为其他排除:(?!.*(?:wordToIgnore|wordToIgnore2|wordToIgnore3))这并不重要,因为查找不会改变您在字符串中的位置。有关这方面的更多信息,请参阅掌握向前看和向后看

这给了我们这个光荣的正则表达式(我添加了不区分大小写的标志):

^(?i)(?!.*(?:wordToIgnore|wordToIgnore2|wordToIgnore3))(?!.*(?: |-|'){2})(?:[''0-9 :/'p{L}'-]{1,64}$)$ 

当然,如果你不想要unicode字母,用a-z代替'p{L}

另外,如果您想确保wordToIgnore是一个真实的单词,而不是一个嵌入的字符串(例如,您不想要cat,但您可以使用catalog),请为前瞻性规则添加边界:(?!.*'b(?:wordToIgnore|wordToIgnore2|wordToIgnore3)'b)

use this:

^(?!.*(the|and|or|a|given|some|that|this|then|than))(?!.*[ ]{2})(?!.*[']{2})(?!.*[-]{2})(?:[a-zA-Z0-9 ':'p{L}'-]{1,64}$)$

看到演示