2012-06-12 3 views
-1

캡처 된 slash_flash까지 첫 번째 패턴 만 원합니다. Perl 비 욕심 많은 일치

$var1 = slash_flash*_target_bit[*]_slash_hit\n 

$var1 =~ s/^(.*)\*?(.*)$/$1/g if ($var1 =~ /\*/); 

내가 다시 전체 문자열을 얻을 :

> $var1 = slash_flash*_target_bit[*]_slash_hit 

주 : $ var1에 아무것도 시작할 수를

나는이 시도했다. 따라서 특정 단어 나 패턴과 일치하는 패턴을 시작할 수 없습니다. 그래서 (*.)

답변

2

먼저 시도한 코드를 게시하십시오. 당신이 말한 것은 진실하지 않습니다. 왜냐하면 당신이 게시 한 것이 컴파일되지 않기 때문입니다.

계속 진행 중입니다.

  • \*?은 0 문자와 일치 할 수 있습니다.
  • .*은 0 문자와 일치 할 수 있습니다.

은 그래서 첫 번째 .*\*?.* 행복 제로 문자와 일치, 전체 문자열과 일치하면.

아마 당신도

$var =~ s/^[^*]*\K\*.*$//; 
+0

$var =~ s/^([^*]*)\*.*$/$1/; 

또는 단축 할 수있다

$var =~ s/^([^*]*)\*.*$/$1/g if ($var1 =~ /\*/); 

나는이에 업데이트 된 질문을 기반으로 한을 원한다. 패턴을 다음 두 줄 중 어느 것과도 일치 시키려면 어떻게해야합니까? 'code'$ var1 = slash_flashold_target_bit [0] 또는 $ var1 = clone_flashnew_target_bit [5] –

+0

@cosmo kramer, 특정에 따라 달라지기 때문에 '/.*/' 작동 할 것이다. '/^(?: slash_flashold_target_bit \ [0 \] | clone_flashnew_target_bit \ [5 \]) \ z /'는 두 줄만 일치시킵니다. 어쩌면 당신은'/ _flashold_target_bit \ [[0-9] + \] \ z /'와 같은 것을 찾고있을 것입니다. – ikegami