首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl解析-字符、制表符和空格的混合

Perl解析-字符、制表符和空格的混合
EN

Stack Overflow用户
提问于 2012-12-21 17:06:02
回答 3查看 66关注 0票数 2

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

代码语言:javascript
复制
MMAPI_CLOCK_OUTPUTS = 1,        /*clock outputs system*/
MMAPI_SYSTEM_MANAGEMENT = 0,    /*sys man system*/

我想解析它们以获得:

代码语言:javascript
复制
'MMAPI_CLOCK_OUTPUTS' 
'1'
'clock outputs system'

所以我试着:

代码语言:javascript
复制
elsif($TheLine =~ /\s*(.*)s*=s*(.*),s*\/*(.*)*\//)

但是这没有得到最后一个字符串‘时钟输出系统’,那么解析代码到底应该是什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-21 17:32:50

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

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

代码语言:javascript
复制
#!/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
票数 0
EN

Stack Overflow用户

发布于 2012-12-21 17:09:09

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

代码语言:javascript
复制
/\s*(.*)\s=\s*(.*),\s\/\*(.*)\*\//
票数 1
EN

Stack Overflow用户

发布于 2012-12-21 17:18:52

代码语言:javascript
复制
if($TheLine =~ m%^(\S+)\s+=\s+(\d+),\s+/\*(.*)\*/%) {
    print "$1 $2 $3\n"
}

这使用%作为替代分隔符,以便在转义/字符时避免leaning toothpick syndrome

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13987134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档