难以找到插入“排除词”的位置;在正则表达式中
本文关键字:位置 正则表达式 排除词 插入 排除 | 更新日期: 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等情况外的匹配(或替换)模式
接下来,在您的特殊情况下,以下是我们如何处理您的正则表达式。
- 考虑到这一点,让我们让所有的负向查找更紧凑,将它们替换为单个
(?!.*(?: |-|'){2})
- 在您的字符类中,
':
只是转义冒号,这是不必要的,因为:
已经足够了。我假设你想添加一个反斜杠字符,如果是这样,我们需要使用''
-
'p{L}
包含[a-zA-Z]
,因此您可以删除[a-zA-Z]
。但是您确定要匹配任何脚本中的所有字母吗?(泰国等)。如果是这样,请记住在regex字符串之后设置u
标志。 - 对于应用于整个字符串的"坏词排除",将其放置在与其他查找相同的位置,即,在字符串的头部,但使用
.*
作为其他排除:(?!.*(?: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}$)$
看到演示