我的代码中有以下类型的行:
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*\/*(.*)*\//)
但这并没有得到最后一个字符串'时钟输出系统' 解析代码究竟应该是什么?
答案 0 :(得分:1)
你应该逃避斜杠,星星和s
空格。不要在正则表达式中写/
,*
或s
,而是写\/
,\*
和\s
:
/\s*(.*)\s=\s*(.*),\s\/\*(.*)\*\//
答案 1 :(得分:1)
if($TheLine =~ m%^(\S+)\s+=\s+(\d+),\s+/\*(.*)\*/%) {
print "$1 $2 $3\n"
}
这会使用%
作为替代分隔符,以便在您转义/
个字符时避免使用leaning toothpick syndrome。
答案 2 :(得分: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