用于在Perl中拆分复杂字符串的字符串

时间:2015-08-26 11:44:58

标签: regex string perl

我有一个看起来像这样的字符串:

'som,ething', another, 'thin#'g', 'her,e', gggh*

我试图将它拆分为不在元素中的逗号,如下所示:

'som,ething'
another
'thin#'g'
'her,e'
gggh*

我正在使用parse_line(q{,}, 1, $string)但是当字符串中包含单引号时似乎失败了。我有什么遗失的吗?

3 个答案:

答案 0 :(得分:1)

#!/usr/bin/perl
use strict;
use warnings;
my $string = q{'som,ething', another, 'thin'g', 'her,e', gggh*};
my @splitted = split(/,(?=\s+)/, $string);
print $_."\n" foreach @splitted;

输出:

'som,ething'
 another
 'thin'g'
 'her,e'
 gggh*

Demo

答案 1 :(得分:0)

您似乎正在尝试解析以逗号分隔的值。答案是使用Text::CSV_XS,因为它可以处理您可能在数据中找到的各种奇怪案例。见How can I parse quoted CSV in Perl with a regex?

答案 2 :(得分:-1)

使用my $line = "'som,ething', another , 'thin#'g', 'her,e' , gggh*"; my @list = $line =~ /\s*('[^#']*(?:#.[^#']*)*+'|[^,]+(?<=\S))\s*/g; print join("|", @list); 不是可行的方法。如果您确定使用全局匹配对字符串进行了格式化,则更简单,例如:

(?<=\S)

app.controller('MainCtrl', function($scope) { $scope.Attachment = "something" $scope.change = function () { $scope.Attachment = "other"; } }); 仅用于修剪右侧的项目)