2009-11-30 6 views
0

followng을하는 것 이외의 다른 하나의 요소 만 잡는 것이 더 쉬운 방법일까요?Perl 정규 표현식에서 단 하나의 캡처 만 얻으려면 어떻게해야합니까?

my $date = ($xml_file =~ m/(\d+)-sys_char/)[0]; 
# or 
my $date = $1 if $xml_file =~ /(\d+)-sys_char/; 

m이 배열을 반환하지 않고 모든 요소를 ​​하나의 연결 값으로 지정하도록 지정하는 플래그가 있습니까? $ #이 (가) 일치하므로 할 수 있습니다.?

my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/); 

끝에서 0을 제거 하시겠습니까?

답변

8

당신이 원하는 :

my ($date) = ($xml_file =~ m/(\d+)-sys_char/); 

이 당신에게 $date에서 $1을 얻을 것이다. 질문의 두 번째 부분에 관해서는, 하나의 변수에 번호가 일치 모두를 얻을 수있는 방법은 없습니다,하지만 당신은이 같은 배열로 그들 모두를 얻을 수 있습니다 :이 실제로 동일한 구문입니다

my @matches = ($xml_file =~ m/(\d+)-sys_char/); 

: 이와 같이 일치하는 항목의 왼쪽이 배열 인 경우 모든 서브 쿼리를 포함하는 배열이 반환됩니다. 첫 번째 버전은 ($date)을 하나의 요소 배열로 만들어 나머지 부분 일치를 버립니다.

+0

아아아, 알겠습니다. 내 $ date, thx 주변에()가 필요합니다. – user105033

+0

두 번째 부분은'my $ date = join ', $ xml_file = ~ m/(\ d +) - sys_char /'를 원하는 것으로 나타났습니다. – darch

3
my ($date) = $xml_file =~ m/(\d+)-sys_char/; 

if (defined $date) { 

} 
관련 문제