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
if($TheLine =~ m%^(\S+)\s+=\s+(\d+),\s+/\*(.*)\*/%) {
    print "$1 $2 $3\n"
}

これは、キャラクターを脱出するときに傾いた楊症候群%を回避するための代替区切り文字として使用されます。/

于 2012-12-21T09:18:51.600 に答える
1

スラッシュ、スター、およびsforスペースをエスケープする必要があります。/*またはs正規表現に書き込む代わりに\/、、\*および\s:を記述します。

/\s*(.*)\s=\s*(.*),\s\/\*(.*)\*\//
于 2012-12-21T09:09:09.440 に答える
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 に答える