2015-03-13 97 views
0

我有这样一个字符串:"abc" "cd - e"。我需要把这个分成两个以下字符串:具有双引号和空格的Perl拆分字符串

  1. ​​
  2. "cd - e"

我试过在Perl的几个选项,但不能满足我需要的。有人可以指导我吗?谢谢。

+2

也:http://perldoc.perl.org/Text/ParseWords.html – jm666 2015-03-13 20:11:59

回答

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

您可以在这是由一个"前面和后面一个"空格分开:

use strict; 
use warnings; 

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

良好的学习......它完美:-) – user2705120 2015-03-13 20:27:41

0

如果你的输入会专门有两个字符串作为你的建议(而不是任意ñ串),那么这应该工作:

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

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

或者你可以让它多了几分安全与“取代.没有正引号”,即[^"]

$s =~ /("[^"]*") ("[^"]*")/; 
$s1 = $1; 
$s2 = $2; 
相关问题