Chciałbym zawrzeć zmienną w regularnym wyrażeniu dopasowania w Perlu i sprawdzić, czy zmienna NIE jest w ciągu.
Połączenie tutaj instruuje, jak dołączyć zmienną, ale mam trudności z testowaniem, czy zmienna NIE jest dopasowana. Jasne, mógłbym po prostu zanegować warunek taki, jak ten:
if (!($string =~ m/$Myvar/)) {
# Do some code here
}
Ale jestem pewien, że musi istnieć sposób na dopasowanie wyrażenia regularnego. Jakieś pomysły?
Z góry dziękuję za pomoc.
Odpowiedzi:
8 dla odpowiedzi № 1Użyj !~
operator.
if ($string !~ m/$Myvar/) {
# Do some code here
}
Albo użyj index
i całkowicie unikać silnika wyrażeń regularnych. To zadziała, nawet jeśli $Myvar
ma znaki traktowane specjalnie przez silnik wyrażeń regularnych.
if ( index($string, $Myvar) < 0 ) {
# Do some code here
}
2 dla odpowiedzi nr 2
Co jest złego w negowaniu wyniku?
„Negatywne dopasowanie” (wymagające negatywnego antycypacja z wyprzedzeniem) sprawia, że wyrażenie regularne jest znacznie bardziej skomplikowane:
if ($string =~ m/^(?!.*$Myvar)/s) {
# Do some code here
}