用Regex排除特殊字符

时间:2017-05-23 08:03:03

标签: regex

我正在尝试获取我的程序集的版本号。我使用正则表达式,这是我的模式。

  $pattern = '\[assembly: AssemblyVersion\("(.*)"\)\]'

它运行良好但在AssemblyInfo.cs和AssemblyInfo.vb中有一些特殊字符作为示例

在cs文件中

// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.7.1.0")]
<。> .vb文件

' <Assembly: AssemblyVersion("1.0.*")> 
  <Assembly: AssemblyVersion("3.2.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

所以我想在我的模式中排除//和'charachters。我试图用[^ //]排除它,但它不起作用。我尝试了别的东西,但它也没用。

第二个问题是

在.vb文件中,有不同的出发点。

<Assembly: AssemblyVersion("3.2.0.0")> 

并且在c#文件中有不同的起始

[assembly: AssemblyVersion("3.7.1.0")]

我如何将vb版本也包含在我的模式中?

问题出在哪里?

2 个答案:

答案 0 :(得分:1)

如果您的图书馆支持,您可以使用否定lookbehind

(?<!\/\/\s|\'\s)\[assembly: AssemblyVersion\("(.*)"\)\]

编辑:
要匹配不同的括号,您只需使用[variant1|variant2]语法

即可
(?<!\/\/\s|\'\s)[<\[][Aa]ssembly: AssemblyVersion\("(.*)"\)[>\]]

答案 1 :(得分:1)

你想&#34;排除&#34;以/'开头的行。

从正则表达式中设置m多行)标志开始。 它确保^匹配每个行的开头(而不是整个字符串)。

然后从:

启动正则表达式
  • ^ - 现在(在多行模式下)作为行开始标记
  • (?!\/|') - 一个带有两个变体的否定前瞻组 内部(不允许该行从/'开始),
  • \s* - 一个可选的空格序列。

然后去你的正则表达式。

所以整个正则表达式应如下所示:

^(?!\/|')\s*\[assembly: AssemblyVersion\("(.*)"\)\]

(请记住m标志)。

其他答案中提到的

负面背后隐藏解决方案存在这样的缺陷 即使一行从'/开始,但此后没有空格, 这样的正则表达式会失败。