2

我的代码中有以下类型的行:

MMAPI_CLOCK_OUTPUTS = 1,        /*clock outputs system*/
MMAPI_SYSTEM_MANAGEMENT = 0,    /*sys man system*/

我想解析它们以获得:

'MMAPI_CLOCK_OUTPUTS' 
'1'
'clock outputs system'

所以我尝试了:

elsif($TheLine =~ /\s*(.*)s*=s*(.*),s*\/*(.*)*\//)

但这没有得到最后一个字符串“时钟输出系统”解析代码实际上应该是什么?

4

3 回答 3

1

您应该避开斜线、星号和sfor 空格。而不是写/,*s在你的正则表达式中写\/,\*\s

/\s*(.*)\s=\s*(.*),\s\/\*(.*)\*\//
于 2012-12-21T09:09:09.440 回答
1
if($TheLine =~ m%^(\S+)\s+=\s+(\d+),\s+/\*(.*)\*/%) {
    print "$1 $2 $3\n"
}

%用作替代分隔符,以避免在转义字符时出现倾斜牙签综合症。/

于 2012-12-21T09:18:51.600 回答
0

试试这个正则表达式:/^\s*(.*?)\s*=\s*(\d+),\s*\/\*(.*?)\*\/$/

这是一个可以测试它的示例:

#!/usr/bin/perl
use strict;
use warnings;

my $str = "MMAPI_CLOCK_OUTPUTS = 1,        /*clock outputs system*/\n
           MMAPI_SYSTEM_MANAGEMENT = 0,    /*sys man system*/";

while ($str =~ /^\s*(.*?)\s*=\s*(\d+),\s*\/\*(.*?)\*\/$/gm) {
    print "$1 $2 $3 \n";
}

# Output:
# MMAPI_CLOCK_OUTPUTS 1 clock outputs system
# MMAPI_SYSTEM_MANAGEMENT 0 sys man system
于 2012-12-21T09:32:50.017 回答