我的代码中有以下类型的行:
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*\/*(.*)*\//)但是这没有得到最后一个字符串‘时钟输出系统’,那么解析代码到底应该是什么呢?
发布于 2012-12-21 17:32:50
试试这个正则表达式:/^\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-21 17:09:09
你应该避开斜杠、星号和空格的s。不是在正则表达式中编写/、*或s,而是编写\/、\*和\s
/\s*(.*)\s=\s*(.*),\s\/\*(.*)\*\//发布于 2012-12-21 17:18:52
if($TheLine =~ m%^(\S+)\s+=\s+(\d+),\s+/\*(.*)\*/%) {
print "$1 $2 $3\n"
}这使用%作为替代分隔符,以便在转义/字符时避免leaning toothpick syndrome。
https://stackoverflow.com/questions/13987134
复制相似问题