如何仅在短语存在时跳过短语

时间:2015-07-30 21:40:58

标签: regex

在过去的几天里,我一直在用正则表达式磨牙,遇到了一个我似乎无法解决的问题。

让我们假设以下3个字符串值

AKA NAME:FOO
FOO
AKA NAME:

我的目标是在AKA NAME之后捕获字符串的值:在命名匹配组中,如果AKA NAME:不存在,则捕获匹配组中的整个字符串。如果" AKA NAME:"如果没有后续值,则正则表达式应该失败。我开发了以下表达式

^(?:AKA NAME:)?\s*(?<VALUE>(.|\n|\r){1,225})$

这将正确捕捉&#34; FOO&#34;在上面的前两个字符串中,然而,在第三个字符串中它捕获&#34; AKA NAME:&#34;在比赛组中。我认为推杆?在包含&#34; AKA NAME的非捕获组之后:&#34;会导致引擎跳过这个值,但事实并非如此。

有人可以给我一些指导吗?

4 个答案:

答案 0 :(得分:1)

您可以尝试:

{{1}}

并检查是否存在$ 1。 DEMO

答案 1 :(得分:0)

使用查看后面的断言,然后仅为“AKA NAME:”排除设置:

EDITTED:

(?<=AKA NAME:)\s?(\w+)|(?!AKA NAME:)^(\w+)

DEMO

答案 2 :(得分:0)

我认为你可以使用这个正则表达式:

"^(AKA NAME\s*:)?\s*(.*)$"gm

并获得\2的结果。

[Regex Demo]

答案 3 :(得分:0)

^(AKA NAME:)?(.*)$

\2应包含您要查找的内容。