둘 모두 내 일치 패턴에서 '리터럴'로 사용해야하는 메타 문자로 가득 찬 두 가지를 일치 시키려고합니다. \Q
은 \E
까지 문자열의 모든 메타 문자를 인용한다고 가정하고 있지만 작동하지 않습니다.Perl, 패턴 일치 및 메타 문자
그게 뭐야?
이
나에게 문제를주는 라인 :if (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {
당신이
$ww[0]
하나에
$prev
에서 문자열을 비교하려는 것 같습니다
둘 모두 내 일치 패턴에서 '리터럴'로 사용해야하는 메타 문자로 가득 찬 두 가지를 일치 시키려고합니다. \Q
은 \E
까지 문자열의 모든 메타 문자를 인용한다고 가정하고 있지만 작동하지 않습니다.Perl, 패턴 일치 및 메타 문자
그게 뭐야?
이
나에게 문제를주는 라인 :if (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {
당신이
$ww[0]
하나에
$prev
에서 문자열을 비교하려는 것 같습니다
. 이 경우, 정규식의 일치는 다음과 같이한다 : 메타 문자를 무시 www[0]
에 무엇이든 동일하지 않습니다 1
$prev
경우
$result = $prev !~ /\Q$ww[0]\E/
$result
가 반환됩니다. 그건 당신이하고 싶었던 모든 경우
그러나, 당신은뿐만 아니라 ne
사용할 수 있습니다 :
if ($prev ne $ww[0]){
#do this if $prev and $ww[0] are not the same
}
을 또한, @toolic가 언급 한 것처럼, 스크립트의 상단에 다음 줄을 추가합니다 :
use warnings;
스크립트의 가능한 문제점에 대한 피드백을 제공합니다. 결석
많은 분들께 감사드립니다 !! 나는 평소처럼 것들을 복잡하게 끝났다. :). ($ prev ne $ ww [0]) 잘 작동했습니다. – user1238319
=~
또는 !~
의 사용은
/.../
그래서
/\Q$prev\E/ !~ /\Q$ww[0]\E/
가
($_ =~ /\Q$prev\E/) !~ /\Q$ww[0]\E/
0123의 약어
$_ =~ m/.../
약자이며
"" !~ /\Q$ww[0]\E/
"1" !~ /\Q$ww[0]\E/
당신은 단순히 원하는 : 왼쪽 정규식 일치 성공 여부에 따라 다음 중 하나에 해당합니다
$prev !~ /\Q$ww[0]\E/ # $ww[0] doesn't contains $prev
당신이 실제로 원하는 경우
$prev !~ /^\Q$ww[0]\E\z/ # $ww[0] isn't equal to $prev
다음은 간단하게 할 수 있습니다
$prev ne $ww[0] # $ww[0] isn't equal to $prev
그런데 항상 use strict; use warnings;
을 사용하십시오. 여기에서 문제를 확인했을 수 있습니다 (값은 $_
에 따라 다를 수 있음).
그런 두 정규 표현식을 비교할 수 없습니다. 더 많은 코드를 게시하고 수행하려는 작업을 명확히 할 수 있습니까? – MattLBeck
"작동하지 않는다"는 것은 무엇을 의미합니까? '$ prev'와'$ ww [0]'을 보간하고 싶습니까, 그렇지 않습니까? – reinierpost
http : // perldoc을 사용하십시오.perl.org/warnings.html. – toolic