"Optional" 行尾 $ 文字(非贪婪)

"Optional" end of line $ literal (non greedy)

我想使 "end of line" 字符 ($) "optional"(或非贪婪)。 意思是,我想在行尾捕获特定模式,或 none。 这是我构建的正则表达式:

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

我想捕捉像

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

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

上测试模式
boot sequence aborted

它确实被捕获了,但是,如果我在上面的整个字符串上测试它,所有的东西都会被捕获,我只需要 "Incompatible device" 部分。

你真的很接近:你只需要用 [^;] 替换匹配任何字符的 .,如下所示:

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

现在,如果存在 (x10) (demo), or the second part if it is missing (demo),您的表达式将捕获第一部分。