我正在尝试获取我的程序集的版本号。我使用正则表达式,这是我的模式。
$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版本也包含在我的模式中?
问题出在哪里?
答案 0 :(得分:1)
如果您的图书馆支持,您可以使用否定lookbehind
(?<!\/\/\s|\'\s)\[assembly: AssemblyVersion\("(.*)"\)\]
编辑:
要匹配不同的括号,您只需使用[variant1|variant2]
语法
(?<!\/\/\s|\'\s)[<\[][Aa]ssembly: AssemblyVersion\("(.*)"\)[>\]]
答案 1 :(得分:1)
你想&#34;排除&#34;以/
或'
开头的行。
从正则表达式中设置m
(多行)标志开始。
它确保^
匹配每个行的开头(而不是整个字符串)。
然后从:
启动正则表达式^
- 现在(在多行模式下)作为行开始标记,(?!\/|')
- 一个带有两个变体的否定前瞻组
内部(不允许该行从/
或'
开始),\s*
- 一个可选的空格序列。然后去你的正则表达式。
所以整个正则表达式应如下所示:
^(?!\/|')\s*\[assembly: AssemblyVersion\("(.*)"\)\]
(请记住m
标志)。
负面背后隐藏解决方案存在这样的缺陷
即使一行从'
或/
开始,但此后没有空格,
这样的正则表达式会失败。