Próbuję dopasować wyrażenie regularne w języku Perl. Mój kod wygląda następująco:Uciekające znaki specjalne w języku Perl regex
my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
print "Match found!"
}
Problem pojawia się, że nawiasy oznaczają klasę postaci (tak czytałem), gdy Perl próbuje dopasować regex, a kończy mecz się niepowodzeniem. Wiem, że mogę uciec z nawiasami przy pomocy \[
lub \]
, ale wymagałoby to kolejnego bloku kodu, aby przejść przez ciąg i wyszukać nawiasy. Czy istnieje sposób na automatyczne ignorowanie nawiasów bez unikania ich pojedynczo?
Szybka uwaga: nie mogę po prostu dodać ukośnika odwrotnego, ponieważ jest to tylko przykład. W moim prawdziwym kodzie, $source
i $pattern
pochodzą zarówno spoza kodu Perla (URIEncoded lub z pliku).
+1 Do korzystania z indeksu() – sln
Co to jest "znak regex"? Miałem wrażenie, że regex jest po prostu środkiem dopasowywania ciągów lub wzorów w strunach, a nie określonym zbiorem znaków, chyba że jest inny sens, którego nie jestem świadomy? Chociaż, dziękuję za indeks(). Zrobię to, gdy jutro będę przy moim serwerze; Myślę, że index() będzie działał lepiej i będzie czystszy niż dopasowanie do wyrażenia regularnego. – CoV
"regex character" był literówką, chciałem napisać "regex metacharacter". – tadmc