2012-07-24 186 views
1

在我的Perl程序中,我在$new中具有可变长度的字符串。以下是一些实例:从字符串中提取元素的正则表达式

$new = "sdf/wer/wewe/dfg"; 
$new = "lkjz/dfgr/wdvf"; 
$new = "asdfe"; 

我如何提取由/分隔的元素融入到使用正则表达式的阵列?

回答

3

可以使用split函数,该函数作为参数的模式分割上,字符串分割,以及可选的次数分裂。

$new = "sdf/wer/wewe/dfg"; 
@values = split("/", $new); 
+0

这是如此简单,我想正则表达式的! :P 谢谢你! – 2012-07-24 19:02:23

+3

@rad,那么,'split'的第一个参数就是一个正则表达式:)顺便说一句,我不想​​隐藏这个事实。我会使用'split(qr {/},$ new)'或'split(qr {\ s */\ s * /},$ new)'。 – ikegami 2012-07-24 19:24:10

+0

@ikegami,你是对的! – 2012-07-24 20:09:47

2

如果你有一个固定的分隔符,那么正则表达式不一定是最好的选择。分割函数是一个更好的选择:

my @items = split "/", $new; 
2

你不说,可在要素是什么人物,但假设他们能够包含一切,但斜线,这将提取它们为你。它也排除任何前导空白或空白字段。

use strict; 
use warnings; 

my @new = (
    " sdf/wer/wewe/dfg ", 
    " sdf/dfgr/wdvf ", 
    " asdfe ", 
    " first field/second field ", 
    " a/b/c/d/e/f ", 
); 

for (@new) { 
    my @fields = m|[^/\s](?:[^/]*[^/\s])?|g; 
    printf "(%s)\n", join ', ', map "'$_'", @fields; 
} 

输出

('sdf', 'wer', 'wewe', 'dfg') 
('sdf', 'dfgr', 'wdvf') 
('asdfe') 
('first field', 'second field') 
('a', 'b', 'c', 'd', 'e', 'f')