当不应该使用新行时正则表达式匹配换行符?

时间:2013-07-13 19:06:41

标签: regex

我不明白。在.NET中我指定RegexOptions.Multiline,使用http://gskinner.com/RegExr/ i checkoff global和multiline

我期望^$匹配行的开头和结尾,.匹配除换行符之外的任何内容。发生了什么.*似乎与换行符匹配似乎是错误的,因为msdn说Single标志允许它匹配换行符(我没有使用)。我使用Linq将组1转换为键,将2转换为值,所有值除第一个外都有效。我想我可以用substring做一些事情,但为什么flash和.NET说这个模式匹配,我该如何修复(我想我可以使用子字符串,如果我需要)

模式:

^\s*([^\:]+)\s*\:\s*(.*)$

输入

ffmp


eg version N-54691-g7f4a1fd Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 12 2013 16:26:02 with gcc 4.7.3 (GCC)

  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 39.100 / 52. 39.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.102 / 55. 12.102
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 80.101 /  3. 80.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Input #0, ogg, from 'd:\music\a.ogg':
  Duration: 00:03:24.49, start: 0.000000, bitrate: 195 kb/s
    Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp, 192 kb/s
    Metadata:
----
---
      ARTIST          : Anamanaguchi
      TITLE           : Blackout City
      ALBUM ARTIST    : Anamanaguchi
      ALBUM           : Dawn Metropolis
      track           : 1
      YEAR            : 2009
      GENRE           : rock
      DATE            : 2009
      ENCODER         : MediaMonkey 4.0.3
      ENSEMBLE        : Anamanaguchi
      RATING          : -1
At least one output file must be specified

1 个答案:

答案 0 :(得分:1)

使用此模式:

^\s*([^:\n]+)\s*:\s*(.*)$

这是因为您的角色类[^:]匹配除:以外的所有字符,但包括换行符。

请注意,单线模式仅表示点可以匹配换行符。由于您使用的是字符类,因此无论是否使用模式

都具有相同的行为