MMAPI_CLOCK_OUTPUTS = 1, /*clock outputs system*/
Run Code Online (Sandbox Code Playgroud)
解析上面这个:
$TheLine =~ /\s*(.*)\s*=\s*(.*),\s*\/\*(.*)\*\//)
Run Code Online (Sandbox Code Playgroud)
变量$1
末尾包含空格,例如我们有"MMAPI_CLOCK_OUTPUTS "
没有"MMAPI_CLOCK_OUTPUTS"
.为什么这些空间也被捕获了?我认为它们应该用解析器代码删除
正则表达式捕获(.*)
是一个贪婪的匹配,这意味着它将匹配尽可能多的字符.由于以下\s*
可以是零长度,因此包含空格的前一个字符串包含在捕获中.
通过添加问号将其更改为非贪婪的模式 (.*?)
,并使用不同的分隔符以避免必须转义模式中的斜杠
$TheLine =~ m<\s*(.*?)\s*=\s*(.*),\s*/\*(.*)\*/>
Run Code Online (Sandbox Code Playgroud)