2009-09-24 4 views
0

$_ =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/; 

이러한 변수를 어떻게 정의 $1$2의 역할은 무엇인가 나에게 펄 정규식 아래의 의미를 제안 해주십시오?

+2

유효한 펄 코드처럼 보이지 않습니다. 나는 첫 번째'/'앞에's'가 있어야하고 아마도'='는'= ~'이어야한다고 생각합니다. 입력 한 내용을 다시 확인하십시오 --- 발견 된 스크립트에서 이상적으로 복사하여 붙여 넣으십시오. – dave4420

답변

10

정규식 의미 :

^   Start of string 
(   Start of capturing group -> $1 
[^,]+  Any character except ",", one or more times 
,   A literal "," 
)   End of capturing group 
ab   "ab" 
.   Any character 
([^,]+,) Same as previously -> $2 
(?:  Start a non-capturing group 
    [^,]+, Same as previously 
)   End group 

각 캡처 그룹 번호를 변수로 배치 ~ 안에 RegEx에 나타나는 순서

+3

* dot all * 수정 기호's'가 설정되어 있지 않으므로'.'는 줄 바꿈 문자를 제외한 모든 문자만을 나타냅니다. – Gumbo

6

$ 1 및 $ 2 변수는 일치 변수입니다.

정규식에서 무언가가 괄호로 묶여있는 경우 정규식의 해당 부분 (일치하는 경우)이 $ n 변수에 저장됩니다.

예 :/(\ d +), (\ w +) /는 123, xyz와 123은 $ 1에 할당되고 xyz는 $ 2에 할당됩니다. 그들은 정규 표현식에 나타나는 순서대로 할당됩니다.

앞의 괄호 뒤에있는 "? :"(즉 : (... :))은 일치하는 값을 $ n 변수에 저장하지 않도록 정규식에 알립니다.

다음은 정규식이 Perl을 사용하여 무엇을하는지 보여주는 예제 코드입니다. 귀하의 질문에 정규식에 대한 선도 s (대체)가 누락 된 것으로 보입니다.

파일 : test.pl

#!/usr/bin/perl 

print $ARGV[0], "\n"; 
$ARGV[0] =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/; 
print "\$1 = $1\n"; 
print "\$2 = $2\n"; 
print $ARGV[0], "\n"; 

실행할 :

%> ./test.pl str1,ab.str2,str3,str4, 
str1,ab.str2,str3,str4, 
$1 = str1, 
$2 = str2, 
str1,str2,str4, 
+0

'.'는 임의의 문자를 나타 내기 때문에 제목에 문자가있는 점이 필요하지 않습니다. 휴식 문자). – Gumbo

관련 문제