Perl에서 다음 구문의 의미는 무엇입니까? a로 다음 :이 펄 정규 표현식은 무엇을 의미합니까?
$line =~ /([^:]+):/;
및
$line =~ s/([^:]+):/$replace/;
Perl에서 다음 구문의 의미는 무엇입니까? a로 다음 :이 펄 정규 표현식은 무엇을 의미합니까?
$line =~ /([^:]+):/;
및
$line =~ s/([^:]+):/$replace/;
당신은 뭔가 아무것도하지만, 하나 개 이상의 문자를 일치 반환 할 및 두 번째는 같은 일을하지만, $로 대체 할 바꾸다.
는
[^:]
perldoc perlreref이 ':'
이외의 모든 문자와 일치하는 문자 클래스를 참조하십시오.
[^:]+
은 이러한 문자 중 하나 이상과 일치한다는 의미입니다.
캡처 괄호가 필요한지 잘 모르겠습니다. 어떤 경우이든,
([^:]+):
은 콜론 (:)으로 끝나는 하나 이상의 콜론이 아닌 문자 시퀀스를 캡처합니다.
첫 번째 문자는 "abc : foo"문자열에서 "abc"와 같이 줄에서 콜론 앞에있는 부분을 캡처합니다. 좀 더 정확히 말하자면 콜론 바로 앞에 적어도 하나 이상의 비 콜론 문자 (가능하면 많은 수)를 매치하여 캡처 그룹에 넣습니다.
이을 포함하여 $replace
의 내용으로 콜론을 사용했지만 두 번째 부분이 해당 부분을 대신합니다. 전 :/
$ 라인 = "http://www.google.com"이 (변수 $ 1 HTTP를 포함합니다)
$line =~ s/([^:]+):/$replace/;
이 시간 HTTP 일치하는 경우
콜론이 일치 항목에 포함되므로 대체됩니다. –
아, 죄송합니다. 내 잘못이야. 캡쳐 그룹에 집중했다. – Joey
$line =~ /([^:]+):/;
는 포함되어 있지 않습니다 아무것도 일치 , 변수 $의 내용과 일치하는 값을 바꿉니다.
이전 답변에 대한 오해가있을 수 있지만, 초에 대한 혼란이 있다고 생각합니다. 예. 이 아닌 경우은 캡쳐 된 항목 (즉, 콜론까지 하나 이상의 비 콜론)을 $ 대체하여 바꿉니다. ([^:]+):
을 모두 $replace
(콜론)으로 바꿉니다.
my $line = 'http://www.example.com/';
my $replace = 'ftp';
$line =~ s/([^:]+):/$replace/;
print "Here's \$line now: $line\n";
출력 : 당신이 비트를 얻을 것이다 당신이 $replace
에서 콜론을 포함하지 않는 경우이 의미
(. 치환은 경기뿐만 아니라 캡처에서 작동) (당신이 하나를 원하는) :
Here's $line now: ftp//www.example.com/ # Damn, no colon!
그냥 예제 코드에서 찾고 있는지 확실하지 않습니다,하지만 당신은 내가 당신이 정말로 이러한 예에서 원하는 모르겠어요 캡처를 사용할 계획이 아니라면.
정규 표현식 (또는 Perl)에 익숙하지 않은 경우 perldoc perlre
또는 perldoc perlretut
을 시도하기 전에 perldoc perlrequick
을 봐야합니다.
$line =~ /([^:]+):/;
= ~ 연산자가 binding operator이라고 그것은 (이 경우 $ 라인) 스칼라 값에 대해 regex 또는 substitution 실행. 정규식 자체에 관해서는 ()
캡처를 지정하십시오. 캡처는 특수 전역 변수에 일치하는 텍스트를 배치합니다. 이러한 변수는 (만약 하나부터 번호가 괄호로 표시 순서에 대응하므로
"abc" =~ /(.)(.)(.)/;
주어진 $1
변수 "a"
포함될 상기 $2
변수 "b"
를 포함하고 $3
변수 "c"
포함될되고 당신은 아직 추측하지 않았습니다 .
는 한 문자 *
과 일치합니다. []
은 문자 클래스를 지정합니다. 문자 클래스는 문자 중 하나와 일치하므로 "a"
, "b"
또는 "c"
인 경우 /[abc]/
은 한 문자와 일치합니다. 문자 클래스는 ^
으로 시작하면 무효화 될 수 있습니다. 제외 된 문자 클래스는 목록에없는 문자와 일치하므로 [^abc]
은 "a"
, "b"
또는 "c"
이 아닌 문자 하나와 일치합니다 (예 : "d"
이 일치합니다). +
을 한정 기호라고합니다. Quantifier는 이전 패턴이 매치해야하는 횟수를 알려줍니다. +
은 패턴이 한 번 이상 일치해야합니다. (*
한정 기호는 패턴이 0 번 이상 일치해야 함). :
에는 정규식 엔진에 특별한 의미가 없으므로 문자 그대로 :
을 의미합니다.
그래서이 정보를 합치면 정규 표현식이 하나 이상의 콜론이 아닌 문자 (이 부분을 $1
에 저장)와 콜론이 일치 함을 알 수 있습니다.
$line =~ s/([^:]+):/$replace/;
이것은 대체 코드입니다. 대체는 정규 표현식과 대체 문자열의 두 부분으로 구성됩니다. 정규 표현식 부분은 정규 표현식과 동일한 규칙을 모두 따릅니다. 교체 부분은 큰 따옴표로 묶인 문자열처럼 취급됩니다. 치환 그래서 다음 코드
my $line = "key: value";
my $replace = "option";
$line =~ s/([^:]+):/$replace/;
은 $ 라인의 변수가 문자열 "option value"
를 개최한다 주어진 교체와 정규식과 일치하는 어떤 대체합니다.
perldoc perlretut
을 읽는 것이 유용 할 수 있습니다. 이
펄 -MYAPE :: 정규식은 "인쇄 YAPE을 -e 설명 :: :: 정규식을 ::들이 설명> 새로운 모든 문자와 일치하는 경우에/m에 옵션을 사용하지 않는 줄 바꿈을 제외한
*
, ('([^ :] +) :') -> 설명 "
The regular expression:
(?-imsx:([^:]+):)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with^and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
[^:]+ any character except: ':' (1 or more
times (matching the most amount
possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
: ':'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
나는 첫 번째 것이 닭이라고 생각했습니다. 두 번째는 나쁜 머리카락을 가진 닭이고, 세 번째는 나쁜 머리카락을 가진 닭을 찌르는 사람입니다. 사람을 찌르는 사람들은 특히 닭을 먹었을 때 데이터 세트를 엉망으로 만드는 경향이 있습니다. 따라서이를 발견하고 덜 파괴적인 것으로 교체하는 것이 좋습니다! – daotoad
나는 마지막 하나가 나쁜 머리카락을 가진 닭을 먹는 사람과 더 비슷하다고 말하고 싶습니다. (insertfoodhere) : – user105033