我搜索了这些表达的含义,但无法理解它们之间的确切区别。
这就是他们所说的:
?:
?=
?!
我尝试在简单的 RegEx 中使用这些并得到了类似的结果。
例如:以下 3 个表达式给出了非常相似的结果。
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?!\.[a-zA-Z0-9]+)*
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?=\.[a-zA-Z0-9]+)*
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9]+)*
?=和之间的区别在于?!前者要求给定的表达式匹配,而后者要求它 不 匹配。例如a(?=b)将匹配“ab”中的“a”,但不匹配“ac”中的“a”。而a(?!b)将匹配“ac”中的“a”,但不匹配“ab”中的“a”。
a(?=b)
a(?!b)
和之间的区别在于?:,?=它?=从整个匹配中排除了表达式,而?:只是不创建捕获组。所以例如a(?:b)将匹配“abc”中的“ab”,而a(?=b)只会匹配“abc”中的“a”。a(b)将匹配“abc”中的“ab” 并 创建包含“b”的捕获。
a(?:b)
a(b)