正则表达式 – 如何从Perl中的字符串中提取子串?
考虑以下字符串:
1)方案编号:abc-456-hu5t10(高优先级)***** 2)方案编号:frt-78f-hj542w(平衡) 3)方案ID:23f-f974-nm54w(超级公式运行)***** 等等在上述格式 – 粗体的部分是跨字符串的变化. ==>想象一下,我有很多格式的字符串如上所示. >包含字母数字值的第一个子字符串(例如上面是“abc-456-hu5t10”) 如何从上面显示的每个字符串中选取这3个子字符串?我知道它可以使用Perl中的正则表达式…可以帮助吗?
你可以这样做:
my $data = <<END; 1) Scheme ID: abc-456-hu5t10 (High priority) * 2) Scheme ID: frt-78f-hj542w (Balanced) 3) Scheme ID: 23f-f974-nm54w (super formula run) * END foreach (split(/n/,$data)) { $_ =~ /Scheme ID: ([a-z0-9-]+)s+(([^)]+))s*(*)?/ || next; my ($id,$word,$star) = ($1,$2,$3); print "$id $word $starn"; } 关键是正则表达式: Scheme ID: ([a-z0-9-]+)s+(([^)]+))s*(*)? 其中分解如下. 固定字符串“方案ID:”: Scheme ID: 其次是一个或多个字符a-z,0-9或 – .我们使用括号将其视为$1: ([a-z0-9-]+) 后面有一个或多个空格字符: s+ 随后是一个开放的支架(我们逃脱),后面是任意数量的不是一个关闭支架的字符,然后是一个关闭支架(转义).我们使用未转义的括号来捕获单词为$2: (([^)]+)) 跟随一些空格,可能是*,被捕获为$3: s*(*)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |