“可选”行尾$ literal(非贪心)

时间:2015-02-12 11:00:06

标签: regex non-greedy end-of-line

我想制作"行结束"字符($)"可选" (或非贪婪的)。 意思是,我想在行的末尾捕获某个模式,或者没有。 这是我建立的正则表达式:

(.+\s*)\s*(?:(\(\s*[xX\*]\s*\d+\s*\))|$)

我想捕捉像

这样的东西
Incompatible device (x10) ; Boot sequence aborted

我想要的是,能够捕获第一个字符串(不兼容的设备(x10)),但是如果量词(x10)没有出现,只能捕获第二个(引导序列中止,之后没有(x##))。 如果我在

上测试模式
boot sequence aborted

它确实被捕获,但是,如果我在上面的整个字符串上测试它,一切都被捕获,我只需要"不兼容的设备"一部分。

1 个答案:

答案 0 :(得分:1)

你真的很接近:你所需要的只是将.替换为任何角色,[^;],如下所示:

([^;]+\s*)\s*(?:(\(\s*[xX\*]\s*\d+\s*\))|$)

现在,如果(x10)存在(demo),您的表达式将捕获第一部分,如果缺少第二部分(demo),则表示第二部分。