2009-07-30 1 views
0

내 코드가 잘 작동하는 데 사용되어 이제는 고장났습니다. 문제의 감소는 다음과 같습니다. 분리 기호에서 소스 문자열 (데이터베이스에서 가져온 것이지만 중요하지 않음)을 분할하고 싶습니다. 구분 기호는 고정되어 있지 않지만 사용자가 문자열로 제공합니다.Perl에서 사용자 제공 문자열 분리 기호를 따라 문자열을 분할하는 방법은 무엇입니까?

@results = split($splitString, $sourceStr); 

을하지만 사용자가 구분 기호로 더하기 기호 (+)를 요청하는 경우이 나누기 : 그 작업을 수행하는 데 사용됩니다. 메시지는 약간은 암호입니다 :

Quantifier follows nothing in regex; marked by <-- HERE in m/+ <-- HERE 

split은 문자열이 아니라 regexp를 기대하기 때문에 깨지기를 바랍니다. 그러나, 나는 일하는 방식으로 $ splitString을 탈출 할 수있는 방법을 찾지 못합니다. 여기에 내 장난감 예가 나와 있습니다.

my $s = 'string 1 + $splitChar + string 2'; 
    my $splitChar = "+"; 
    my @result = split(/\\$splitChar/, $s); 

    print "num of results ".scalar(@result)."\n"; 
    foreach my $value (@result) { 
    print "$value\n"; 
    } 

하지만 전혀 분할되지 않습니다. 여러 가지 변형을 시도했지만 어느 것도 효과가 없었습니다. 사용자 지정 구분 기호는 아마도 한 문자로 제한되지만 다중 문자 솔루션이 더 좋을 것입니다.

(예, 필자 만의 특수한 분할 기능을 쓸 수도 있지만, 중요한 것은 아닙니다.)

(작은 따옴표로 묶인 문자열 예제에서는 $splitChar이 의도적으로 나온 것입니다. 이유는 분명합니다).

#!/usr/bin/perl 

use strict; 
use warnings; 

my $sep = '+'; 
my $source = 'one+two+three'; 

my @results = split /\Q$sep\E/, $source; 

use Data::Dumper; 
print Dumper \@results; 

perldoc -q "quote a variable" 참조 : split

답변

15

첫 번째 인수는 패턴이다.

+0

위대한, 나는 \ Q와 \ E에 대해 몰랐다. 그게 내가 필요한거야. 많은 감사 –

6

문제는 +가

신안의 대답은 (당신이 원하는 그것이 지정하지 않고, 그래서 당신은 하나 이상의 요청하고 있습니다) 위의 항목 중 '하나 더'를 나타 내기 위해 메타 문자로 사용되는 것입니다 좋은 것, 그리고 quotemeta 기능을 확인하십시오.

관련 문제