如何在正面观察之后在单引号之间捕获文本?

时间:2018-01-09 19:12:53

标签: regex

我正在尝试解析错误字符串,以便在API中返回有意义的输出。以下是错误字符串的示例:

Integrity constraint violation: 1062 Duplicate entry 'email@test.com' for key 'UNIQ_8D93D649A0D96FBF'

尝试从这句话中解析email@test.com。这是我现在的正则表达式:

/(?<=Duplicate entry ')(.*)'/

我正在为Duplicate entry '做一个积极的看法,它让我到了我想要的字符串的开头。然后我想捕捉所有内容,直到我达到单引号。但是,这个正则表达式正在捕获以下内容:

email@test.com' for key 'UNIQ_8D93D649A0D96FBF'

所以我的正则表达式一直在捕捉到最终的单引号。我最初的预感是,我需要做一个不贪心的积极前瞻。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为默认情况下量词是贪婪的。将.*更改为.*?会解决您的问题,但使用[^']*被认为更正确(并且效果也更好),因为它不会回溯。

结果

输入

Integrity constraint violation: 1062 Duplicate entry 'email@test.com' for key 'UNIQ_8D93D649A0D96FBF'

输出

email@test.com

代码

See regex in use here

(?<=Duplicate entry ')[^']*