2014-05-19 48 views
0

我對正則表達式的工作,以配合下面給出一個樣本HL7消息的格式相匹配的文件格式:無法使用正則表達式

MSH|^~\`|674|GHC|SISRL|PAML|20060922162830|L674-200609221628310220|ORU^R01|ORU000016168|P|2.3|||AL|AL 
PID|1|000-0000|||」」|1922974|151-76-5760|||||||||||N 
PV1|1|2|||||||| ||||||N|| || 
ORC|RE||2060059||||^^^200707061707^^ ||200707051013|DIONA |||」」|||1007 
OBR|||2060059|999991^Knee MRI WO| |200707061707|200707061621|200707061707||||」」|」」||| 
OBX|1|TX|||PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST||||||F 

$ filecontents持有上述消息。

$filecontents=~/^(.*?\rOBX\|.*?\|.*?\|.*?\|.*?\|)(.*?)(.*?)/; 
$begin=$1; 
$end=$3; 
$content=$2; 

的3個變量的期望的結果應該是如下:

$begin = "MSH|^~\`|674|GHC|SISRL|PAML|20060922162830|L674-200609221628310220|ORU^R01|ORU000016168|P|2.3|||AL |AL 
PID|1|000-0000|||」」|1922974|151-76-5760|||||||||||N 
PV1|1|2|||||||| ||||||N|| || 
ORC|RE||2060059||||^^^200707061707^^ ||200707051013|DIONA |||」」|||1007 
OBR|||2060059|999991^Knee MRI WO| |200707061707|200707061621|200707061707||||」」|」」||| 
OBX|1|TX|||"; 

$end = "||||||F"; 

$content = "PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST"; 

但我不是輸出。有人可以告訴我什麼是錯誤的正則表達式?

回答

1

試試這個,這只是缺少$。

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


my $data = do { local $/; <DATA> }; 
$data =~ /(.*?^OBX\|.*?\|.*?\|.*?\|.*?\|)(.*?)\|(.*?)$/ms; 

my ($begin, $content, $end) = ($1, $2, $3); 

print "BEGIN: $begin\n"; 
print "CONTENT: $content\n"; 
print "END: $end\n"; 

__DATA__ 
MSH|^~\`|674|GHC|SISRL|PAML|20060922162830|L674-200609221628310220|ORU^R01|ORU000016168|P|2.3|||AL|AL 
PID|1|000-0000|||""|1922974|151-76-5760|||||||||||N 
PV1|1|2|||||||| ||||||N|| || 
ORC|RE||2060059||||^^^200707061707^^ ||200707051013|DIONA |||""|||1007 
OBR|||2060059|999991^Knee MRI WO| |200707061707|200707061621|200707061707||||""|""||| 
OBX|1|TX|||PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST||||||F 

輸出

BEGIN: MSH|^~\`|674|GHC|SISRL|PAML|20060922162830|L674-200609221628310220|ORU^R01|ORU000016168|P|2.3|||AL|AL 
PID|1|000-0000|||""|1922974|151-76-5760|||||||||||N 
PV1|1|2|||||||| ||||||N|| || 
ORC|RE||2060059||||^^^200707061707^^ ||200707051013|DIONA |||""|||1007 
OBR|||2060059|999991^Knee MRI WO| |200707061707|200707061621|200707061707||||""|""||| 
OBX|1|TX||| 
CONTENT: PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST 
END: |||||F 
1

你可能想:

$filecontents =~ /(.*?^OBX\|.*?\|.*?\|.*?\|.*?\|)(.*?)\|(.*?)/ms; 

的主要變化是:

  1. 使用/s修改,以使任何字符.將匹配換行符。
  2. 改變\r^並增加了/m修飾符。
  3. 在第2個和第3個捕獲組之間添加分隔符。

在一個完整的腳本:

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

my $data = do { local $/; <DATA> }; 

$data =~ /(.*?^OBX\|.*?\|.*?\|.*?\|.*?\|)(.*?)\|(.*?)/ms; 

my ($begin, $content, $end) = ($1, $2, $3); 

print "$content\n"; 

__DATA__ 
MSH|^~\`|674|GHC|SISRL|PAML|20060922162830|L674-200609221628310220|ORU^R01|ORU000016168|P|2.3|||AL|AL 
PID|1|000-0000|||」」|1922974|151-76-5760|||||||||||N 
PV1|1|2|||||||| ||||||N|| || 
ORC|RE||2060059||||^^^200707061707^^ ||200707051013|DIONA |||」」|||1007 
OBR|||2060059|999991^Knee MRI WO| |200707061707|200707061621|200707061707||||」」|」」||| 
OBX|1|TX|||PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST||||||F 

輸出:

PROCEDURE: MRI OF THE LEFT KNEE WITHOUT CONTRAST 
+0

這是行不通的。 – Robie