没有新行的正则表达式匹配 ^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
显示内容时才显示。当我使用 vi
或 vim
.
编辑时显示
对此有任何帮助吗?
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 或制表符
我的 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
显示内容时才显示。当我使用 vi
或 vim
.
对此有任何帮助吗?
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 或制表符