Perl在字符串末尾解析空格字符

ade*_*ade 1 perl parsing

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".为什么这些空间也被捕获了?我认为它们应该用解析器代码删除

Bor*_*din 8

正则表达式捕获(.*)是一个贪婪的匹配,这意味着它将匹配尽可能多的字符.由于以下\s*可以是零长度,因此包含空格的前一个字符串包含在捕获中.

通过添加问号将其更改为非贪婪的模式 (.*?),并使用不同的分隔符以避免必须转义模式中的斜杠

$TheLine =~ m<\s*(.*?)\s*=\s*(.*),\s*/\*(.*)\*/>
Run Code Online (Sandbox Code Playgroud)