我知道排除单词的正则表达式,大致无论如何,它将是(!?wordToIgnore|wordToIgnore2|wordToIgnore3)
但我有一个现有的,复杂的正则表达式,我需要添加这个,我对如何去做有点困惑。我仍然是regex的新手,我花了很长时间来制作这个特别的,但我不知道在哪里插入它或者如何...
我的正则表达式是......
^(?!.*[ ]{2})(?!.*[']{2})(?!.*[-]{2})(?:[a-zA-Z0-9 \:/\p{L}'-]{1,64}$)$
这应该只允许键入的人插入1到64个匹配该模式的字母,不能以空格,引号,双引号,特殊字符,短划线,转义字符等开头,并且只允许az同时大写和小写,可以在任何地方包括空格,“:”,短划线和引号。
但是我想禁止他们使用某些单词,所以我有这个我希望被禁止的单词列表,我只是无法弄清楚如何适应这里...我试着粘贴整个。 。“阻止”,并没有奏效。
?!the|and|or|a|given|some|that|this|then|than
有没有人遇到过这个?
答案 0 :(得分:3)
ciel,首先,祝贺我们试图建立你的正则规则。如果您想阅读有关各种排除的详细信息,建议您查看Match (or replace) a pattern except in situations s1, s2, s3 etc
接下来,在您的特定情况下,我们将如何处理您的正则表达式。
(?!.*(?: |-|'){2})
取代它们\:
只是不必要地逃过冒号,因此:
就足够了。我假设你想添加一个反斜杠字符,如果需要,我们需要使用\\
\p{L}
包含[a-zA-Z]
,因此您可以删除[a-zA-Z]
。但是你确定要匹配任何脚本中的所有字母吗? (泰国等)。如果是这样,请记住在正则表达式字符串之后设置u
标志。.*
与其他排除项一样: (?!.*(?:wordToIgnore|wordToIgnore2|wordToIgnore3))
首先看哪个先行是没关系的,因为lookarounds不会改变你在字符串中的位置。有关详情,请参阅Mastering Lookahead and Lookbehind 这给了我们这个光荣的正则表达式(我添加了不区分大小写的标志):
^(?i)(?!.*(?:wordToIgnore|wordToIgnore2|wordToIgnore3))(?!.*(?: |-|'){2})(?:[\\0-9 :/\p{L}'-]{1,64}$)$
当然,如果您不想要unicode字母,请将\p{L}
替换为a-z
另外,如果你想确保wordToIgnore
是一个真正的单词,而不是嵌入的字符串(例如你不想要cat
,但你可以使用{{1} }}),为前瞻规则添加边界:catalog
答案 1 :(得分:0)
使用它:
^(?!.*(the|and|or|a|given|some|that|this|then|than))(?!.*[ ]{2})(?!.*[']{2})(?!.*[-]{2})(?:[a-zA-Z0-9 \:\p{L}'-]{1,64}$)$
请参阅demo