使用正面外观的目的是什么?

时间:2016-12-14 09:09:55

标签: regex

假设字符串是'abc'并且表达式是(?= a)abc,这与仅搜索abc不一样吗?什么时候积极的看法有目的而不使用它们?

1 个答案:

答案 0 :(得分:2)

  

积极前瞻的作用是一样的。 q(?= u)匹配一个q,后跟一个u,,而不是匹配的u部分。积极的先行构造是一对括号,左括号后跟一个问号和一个等号。

http://www.regular-expressions.info/lookaround.html

以下是https://ourcraft.wordpress.com/2009/03/25/positive-examples-of-positive-and-negative-lookahead/

的一个小例子

假设我想从文本文档中检索紧跟逗号后面的所有单词。我们将使用此示例字符串:

What then, said I, shall I do? You shan't, he replied, do anything.

作为第一次尝试,我可以使用此正则表达式来获取一个或多个单词部分,后跟逗号:

[A-Za-z']+,

这比字符串产生四个结果:

then,
I,
shan't,
replied,

请注意,这也让我得到了逗号,然后我必须删除它。如果我们能够表达我们想要匹配一个逗号后跟逗号而不匹配逗号的单词会不会更好?

我们可以通过修改我们的正则表达式来做到这一点:

[A-Za-z']+(?=,)

这会匹配后跟逗号的单词字符组,但由于使用了前瞻,逗号不是匹配文本的一部分(正如我们希望的那样)。修改后的正则表达式导致这些匹配:

then
I
shan't
replied