正则表达式从字符串中提取元素

时间:2012-07-24 18:44:24

标签: regex perl

在我的perl程序中,我在$new中有一个长度可变的字符串。以下是一些实例:

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

如何使用正则表达式将/分隔的元素提取到数组中?

3 个答案:

答案 0 :(得分:3)

您可以使用split函数,该函数将要拆分的模式作为参数,要拆分的字符串以及可选的拆分次数。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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')