2013-07-02 5 views
0

문자열이 'Basingstoke & Deane'인데 '&' 기호를 확인하고 해당 위치에서 문자열을 잘라내어 포함하고 싶습니다. 'Basingstoke & Deane'perl에서 특정 문자의 문자열을 자르는 방법은 무엇입니까?

그리고 출력은 다음과 같습니다 :

그래서 내 입력 될 'Basingstoke '

내가 $string =~ /&/를 사용하여 '&' 잘 검색 할 수 있습니다 및 s/&//을 사용하여 삭제/교체 할 수 있습니다,하지만 난에 봉착 & 및 그 이후의 모든 문자를 삭제하는 방법에 대한 정신적 차단. 남아있는 여분의 공간은 중요하지 않습니다.

이것은 많은 문자열 중 하나이므로 일반 솔루션이 가장 좋을 것입니다. 죄송합니다. 전에 질문을 받았다면, substr을 사용하여 문자열을 잘라내는 것에 대해 많은 질문을 보았습니다. 특정 문자열을 검색하는 등의 질문을했지만, 제가 찾던 답변은 없습니다. 어떤 도움을 주셔서 감사합니다.

+0

's/([^ &] *) &/$ 1 /'어떨까요? – user1937198

+0

또는 더 간단하면's /&.*//'아마도? – duskwuff

+0

대단한 답변 들아, 환호! – dgBP

답변

4
$string =~ s/&.*//s; 

줄 바꿈을 포함하여 나머지 문자열을 삭제합니다.

+0

'/ s'는 무엇을합니까? – dgBP

+0

@bladepanthera,'.'는 코드 포인트와 일치합니다 (개행을 제외한 모든 것에 반대 됨). – ikegami

+2

@bladepanthera http://perldoc.perl.org/perlre.html#Modifiers ikegami가 방금 말했듯이 와일드 카드가 어떤 문자와도 일치하게 만듭니다. 일반적으로 개행과 일치하지 않습니다. – TLP

2

또한 &의 인덱스를 찾을 문자열의 일부를 적용하려면 substr 기능을 사용할 수 있습니다 @TLP의

my $string = 'Basingstoke & Deane'; 
my $amp_index = index($string, '&'); 

print substr($string, 0, $amp_index); 
# Basingstoke 

씨 (좌변으로 SUBSTR) :

substr($string, index($string, '&')) = "" 
+0

'substr ($ string, index ($ string, '&')) = "";'또한 깔끔한 트릭입니다. – TLP

+0

@TLP 그래, 나는 그것을 좌래 값으로 사용할 수 있다는 것을 잊었다. 나는 그것을 위에 추가 할 것이다. –

+0

나는 OP가 에러 처리를 이해할 수 있다고 생각한다. :) –

2
my ($prefix) = $string =~ /^([^&]*)/s; 

my ($prefix) = split /&/, $string;  # Slightly faster, IIRC 

인 - 장소 :

$string =~ s/&.*//s; 
+0

첫 번째 예에서는 캐럿이 중요하지 않습니다. 편집 : 라인 앵커의 시작, 즉. – TLP

+0

@TLP, 그렇긴하지만 좋은 습관입니다. 독자가 문자열의 시작 부분에서 일치 할 것으로 기대한다고 말할뿐만 아니라 유사한 표현에서 많은 역 추적을 피할 수 있습니다. – ikegami

+0

실제로 처음부터 일치해야 할 점이 있다면, 확실히 상처를주지는 않습니다. 그렇다면 말하듯이 그것을 포함하는 것이 좋습니다. – TLP

관련 문제