小编典典

?:, ?! 之间的区别 和 ?=

all

我搜索了这些表达的含义,但无法理解它们之间的确切区别。

这就是他们所说的:

  • ?:匹配表达式但不捕获它。
  • ?=匹配后缀,但将其从捕获中排除。
  • ?!如果后缀不存在则匹配。

我尝试在简单的 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]+)*

阅读 60

收藏
2022-08-01

共1个答案

小编典典

?=和之间的区别在于?!前者要求给定的表达式匹配,而后者要求它
匹配。例如a(?=b)将匹配“ab”中的“a”,但不匹配“ac”中的“a”。而a(?!b)将匹配“ac”中的“a”,但不匹配“ab”中的“a”。

和之间的区别在于?:?=?=从整个匹配中排除了表达式,而?:只是不创建捕获组。所以例如a(?:b)将匹配“abc”中的“ab”,而a(?=b)只会匹配“abc”中的“a”。a(b)将匹配“abc”中的“ab”
创建包含“b”的捕获。

2022-08-01