Perl Split具有双引号和空格的字符串

时间:2015-03-13 20:04:00

标签: regex string perl parsing

我有一个这样的字符串:"abc" "cd - e"。我需要将其拆分为以下两个字符串:

  1. "abc"
  2. "cd - e"
  3. 我在Perl中尝试了几个选项,但无法满足我需要的选项。有人可以指导我吗?感谢。

3 个答案:

答案 0 :(得分:2)

my @strings = $input =~ /"[^"]*"/g;
  • 假设输入有效。基本上,您可以使用正则表达式匹配来验证或提取,但同时执行这两项操作非常困难。
  • 假设引用的字段不能包含引号,因为您没有提及转义机制。

答案 1 :(得分:2)

您可以拆分前面有"后跟"的空格:

use strict;
use warnings; 

my $s = '"abc" "cd - e"';
my @matches = split /(?<=")\s+(?=")/, $s;
# "abc"
# "cd - e"

答案 2 :(得分:0)

如果你的输入特别有你建议的两个字符串(而不是任意 n 字符串),那么这应该有效:

$s = '"abc" "cd - e"';

$s =~ /(".*") (".*")/;
$s1 = $1;
$s2 = $2;

或者,您可以将.替换为&#34;非引用&#34;,即[^"]

,从而使其更加安全
$s =~ /("[^"]*") ("[^"]*")/;
$s1 = $1;
$s2 = $2;