$_ =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/;
이러한 변수를 어떻게 정의 $1
및 $2
의 역할은 무엇인가 나에게 펄 정규식 아래의 의미를 제안 해주십시오?
$_ =~ s/^([^,]+,)ab.([^,]+,)(?:[^,]+,)/$1$2/;
이러한 변수를 어떻게 정의 $1
및 $2
의 역할은 무엇인가 나에게 펄 정규식 아래의 의미를 제안 해주십시오?
정규식 의미 :
^ 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에 나타나는 순서
* dot all * 수정 기호's'가 설정되어 있지 않으므로'.'는 줄 바꿈 문자를 제외한 모든 문자만을 나타냅니다. – Gumbo
$ 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,
'.'는 임의의 문자를 나타 내기 때문에 제목에 문자가있는 점이 필요하지 않습니다. 휴식 문자). – Gumbo
유효한 펄 코드처럼 보이지 않습니다. 나는 첫 번째'/'앞에's'가 있어야하고 아마도'='는'= ~'이어야한다고 생각합니다. 입력 한 내용을 다시 확인하십시오 --- 발견 된 스크립트에서 이상적으로 복사하여 붙여 넣으십시오. – dave4420