perl正则表达式匹配问题
我的正则表达式匹配有问题perl正则表达式匹配问题,perl,Perl,我的正则表达式匹配有问题 my $line = 'Line no. : 8 : 8 : <ENAMEX TYPE="GENE">' . 'CRP</ENAMEX> : directly inhibits : endothelial cell nitric' . 'oxide <ENAMEX TYPE="GENE">facs</ENAMEX>' . '<ENAMEX TYPE="GENE">crp</ENAMEX>
my $line = 'Line no. : 8 : 8 : <ENAMEX TYPE="GENE">'
. 'CRP</ENAMEX> : directly inhibits : endothelial cell nitric'
. 'oxide <ENAMEX TYPE="GENE">facs</ENAMEX>'
. '<ENAMEX TYPE="GENE">crp</ENAMEX>:inhibit:endothelial'
. 'cell nitric oxide :Confidence Score 0.9017396427774064';
$line =~ /(.+)(\<ENAMEX TYPE\=\"GENE\"\>)(.+)(\<\/ENAMEX\>) (.+)(\<ENAMEX TYPE\=\"GENE\"\>)(.+)(\<\/ENAMEX\>)(.+)/;
print "$3 ---$5 ---$7\n";
my$line='行号:8:8:'
. 'CRP:直接抑制:内皮细胞一氧化氮'
. '氧化物facs'
. 'crp:抑制:内皮细胞
. '细胞一氧化氮:置信度得分0.9017396427774064';
$line=~/(.+)(\)(.+)(\)(.+)(\)(.+)(\)(\)(.+)/;
打印“$3--$5--$7\n”;
输出为:
CRP ---: directly inhibits : endothelial cell nitric oxide <ENAMEX TYPE="GENE">facs</ENAMEX> ---
CRP---:直接抑制:内皮细胞一氧化氮facs---
问题:
我想要的是使用正则表达式提取这3个东西。输出应该是这样的
CRP---:直接抑制:内皮细胞一氧化氮---facs
请告诉我问题出在哪里,因为$2在第一块之后打印任何内容,而正则表达式与第二部分不匹配。
谢谢要获得所需的匹配项,您需要在正则表达式中使用非reedy量词,即将
+
替换为+?
:
$line =~ /(.+?)(\<ENAMEX[ ]TYPE\=\"GENE\"\>)(.+?)(\<\/ENAMEX\>)[ ]
(.+?)(\<ENAMEX[ ]TYPE\=\"GENE\"\>)(.+?)(\<\/ENAMEX\>)(.+?)/x;
$line=~/(.+?)(\)(.+?)(\)[]
(.+?)(\)(.+?)(\)(.+?)/x;
根据:
有时贪婪是不好的。有时,我们希望量词
匹配最小的一段字符串,而不是最大的一段。为此
目的,拉里·沃尔创造了最小匹配或非贪婪
量词??,*?,+?,和{}?。这些是常用的量词
用一个?附加在它们后面。它们具有以下含义:
[……]
- a+?表示:匹配“a”1次或多次,即至少匹配一次,但次数应尽可能少
尝试使用非语法量词,即用
?
替换+
。有关更多信息,请参阅。谢谢million@ary如果这个答案解决了你的问题,考虑接受它。看见