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

时间:2015-06-11 08:46:17

标签: regex perl newline vi

我的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进行编辑时会显示。

对此有何帮助?

2 个答案:

答案 0 :(得分:2)

我认为使用我在解决主要问题的解决方案中使用的模式更直观,而不是CR的预测

[Flags]

捕获/Operating System:\s*(.*\S)/ 之后从第一个到最后一个非空格字符的所有内容。除了更具可读性之外,这种模式的主要优点是可移植,并且不依赖于行尾的尾随CR(无论如何可能不会出现在文件的最后一行)。

CR和LF都计为空格,因此它将忽略它们以及文件中可能包含的任何尾随空格或制表符

答案 1 :(得分:0)

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

你可以试试这个。

  

搜索时

     

...

     

\ n是换行符,\ r是CR(回车= Ctrl-M = ^ M)