好吧,虽然模式 [abc]
匹配单个字符 a
、b
或 c
时,模式 [^abc]
匹配任何不是的给定字符 a
、b
或c
.
现在,如果我在上面的语句中用 string 替换 character,如果我还将第一个模式更改为像 (abc |def|ghi)
。 -- 它将匹配等于 abc
、def
或 ghi
的三个字符的连续字符串。如何匹配不等于 abc
、def
或 ghi
的任意三个字符的字符串>?
最佳答案
这是正则表达式的一个常见问题,简短的回答是“否”,正则表达式的操作方式没有提供“除...之外的任何 3 字母字符串”的表达方式。
但是,一些正则表达式引擎允许所谓的“否定先行断言”。这些有点难以理解 - this explanation of lookaround似乎很好地涵盖了它,尽管有点技术性。
关于前瞻的重要一点是它是“零宽度”的——它不会“用完”任何字符串。因此,在 Javascript 中,您可以匹配如下字符串:'abc123ghi'.match(/abc(?!def)...ghi/)
- (?!def)
表示在 'abc'
之后不能有字母 'def'
,但是 ...
需要存在说那里应该有其他 3 个字符。
关于javascript - PCRE 中是否有 "negated alternation"或 "negated string classes"、 la "negated character classes"之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437757/