2011-03-28 2 views
10

분리하려는 문자열이 있습니다. 하지만 구분 기호는 런타임에 결정되므로 변수로 전달해야합니다.왜`|`(파이프)로 분할하면 예상대로 작동하지 않습니까?

같은 것이 my @fields = split(/$delimiter/,$string);과 같지 않습니다. 이견있는 사람?


입력 :

abcd|efgh|23 

예상 출력 :

당신이 정규 표현식의 특수 문자가이기 때문에, 당신의 구분 기호를 탈출 할 필요가
abcd 
efgh 
23 
+2

귀하의 입력, 실제 출력 및 예상 출력이 대단히 유용한 정보가 될 것입니다 ... – Sean

+5

당신은 "구분 기호를"이 없습니다, 당신은 "분리 자"를 가지고 있습니다. "구분 기호"는 한계를 표시합니다. 큰 따옴표와 같이 양쪽 끝에 있습니다. "구분 기호"는 요소 사이에 들어갑니다 (예 : "|" 귀하의 예제 입력. – tadmc

+0

[Perl 정규 표현식에서 특수 문자를 처리하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

답변

19

.

옵션 1 :

$delimiter = quotemeta($delimiter); 
my @fields = split /$delimiter/, $string; 

옵션 2 :

my @fields = split /\Q$delimiter/, $string; 
+0

자세한 정보는'perldoc perlretut','perldoc perlre' 그리고/\\ Q /를 찾고'perldoc -f quotemeta'를 보라. – shawnhcorey

+2

'split'의 인수는 구분 기호가 아니고 구분 기호입니다. – tchrist

+0

'perldoc -f split'에 따르지 않습니다 : "PATTERN과 일치하는 것은 필드를 구분하는 분리 문자로 간주됩니다." – Sean

관련 문제