没有新行的正则表达式匹配 ^M

Regex Match without new line ^M

我的 perl 脚本中有一个正则表达式 /Operating System:\s*(.*)/。 我匹配的行是 Operating System: Windows XP Service Pack 3 但是,在该行之后输入后有一个新行。因此文本将被视为 Operating System: Windows XP Service Pack 3^M.

有没有办法使用我现有的正则表达式摆脱 ^M?它捕获 Windows XP Service Pack 3^M^M 仅在我使用命令提示符或 PuTTy 的 more 显示内容时才显示。当我使用 vivim.

编辑时显示

对此有任何帮助吗?

Operating System:\s*(.*)(?=\r)

你可以试试这个。

When Searching

...

\n is newline, \r is CR (carriage return = Ctrl-M = ^M)

与 CR 的前瞻性相比,我认为使用我在解决您的主要问题时放入的模式更直观

/Operating System:\s*(.*\S)/

捕获 Operating System 之后从第一个到最后一个非 space 字符的所有内容。除了更具可读性之外,这种模式的主要优势在于它是可移植的,并且不依赖于行末尾随 CR 的存在(它可能不会出现在文件的最后一行)。

CR 和 LF 都算作白色space,因此它将忽略它们以及文件中可能存在的任何尾随 space 或制表符