안녕하세요, 저는 지금 당장 배우지 않으려 고하면서 정규 표현식에 능숙하지 않아요, 누군가 이걸 나를 조금씩 설명 할 수 있을까요?Perl Regex 설명
if ($fileStrings[$stringCount] =~ m/((?:include|require)(?:_once)?\s*\(.*?\$.*?\);)/gi)
감사
안녕하세요, 저는 지금 당장 배우지 않으려 고하면서 정규 표현식에 능숙하지 않아요, 누군가 이걸 나를 조금씩 설명 할 수 있을까요?Perl Regex 설명
if ($fileStrings[$stringCount] =~ m/((?:include|require)(?:_once)?\s*\(.*?\$.*?\);)/gi)
감사
m/((?:include|require)(?:_once)?\s*(.?\$.?);)/gi
m
경기
/
패턴
(?:include|require)
(?:_once)?
옵트을 '필요'캡처 '를 포함'여부 ionally에 대한 일치하지만 '_once'
\s*
0 개 이상의 공백이나 탭, 경기 및 캡처 0 또는 문자 1, 문자 $ 문자 다음에 다음
(.?\$.?)
다른 "공백"문자
;
경기
(...)
외부 괄호 1 - 모든 일을
/
패턴 구분
gi
글로벌, 대소 문자를 구별하지 검색
왜 0을 찾아야합니까? 또는 더 많은 공백이나 탭이 있습니까? – noledgeispower
실제로'\ s'는 단지 공백과 탭 이상에 일치합니다. * newline *, * carriage-return * * vertical-tab *과 같은 공백 문자와 모든 유니 코드 공백 문자를 일치시킵니다. 자세한 내용은 [perldoc perlrecharclass] (http://perldoc.perl.org/perlrecharclass.html#Whitespace)를 참조하십시오. –
@noledgeispower : 글쎄, 나 한테 물어 보지 마, 내가 그것을 작성하지 않았다, 그냥 그것을 설명했다 –
. 어쩌면 이것은 당신이 정규식이 무엇을하고 있는지 이해하는 데 도움이 될 것입니다 :
#! /usr/bin/env perl
use warnings;
use strict;
use feature qw(say);
for my $line (
'include_once F$G;',
'require_once F$G;',
'INCLUDE F$G;',
'include_once AF$G;',
'include_once F$G;',
) {
if ($line =~ m/((?:include|require)(?:_once)?\s*(.?\$.?);)/gi) {
say qq(Line = "$line");
say qq(\$1 = "$1");
say qq(\$2 = "$2"\n);
}
else {
say qq(Line = "$line");
say "No match!\n";
}
}
을 그리고 출력은 다음과 같습니다
Line = "include_once F$G;"
$1 = "include_once F$G;"
$2 = "F$G"
Line = "require_once F$G;"
$1 = "require_once F$G;"
$2 = "F$G"
Line = "INCLUDE F$G;"
$1 = "INCLUDE F$G;"
$2 = "F$G"
Line = "include_once AF$G;"
No match!
Line = "include_once F$G;"
$1 = "include_once F$G;"
$2 = "F$G"
괄호는 정규 표현식의 일부를 캡처하는 데 사용됩니다, $3
변수 $1
, $2
입니다 ?:
은 괄호로 해당 부분을 캡처 할 수 없으므로 값이 $4
이 아닌 $2
이됩니다. 그러나 바깥 쪽 괄호는 ?:
에도 불구하고 전체 줄을 캡처합니다.
마지막으로 g
매개 변수가 여러 줄을 캡처 할 수있는 것처럼 보입니다. 그러나, 그건 내 테스트에서 작동하지 않았다.
[YAPE :: Regex :: Explain] (http://search.cpan.org/~gsullivan/YAPE-Regex-Explain-4.01/Explain.pm) - 정규 표현식에 대한 설명 –