Jak mogę sprawdzić, czy dany ciąg zawiera określony podciąg, używając Perla?
Dokładniej, chcę sprawdzić, czy s1.domain.com
występuje w danej zmiennej ciągu.
string
perl
string-matching
Belgin Fish
źródło
źródło
:
).Inną możliwością jest użycie wyrażeń regularnych, z czego słynie Perl:
Ukośniki odwrotne są potrzebne, ponieważ a
.
może pasować do dowolnego znaku. Możesz to obejść za pomocą operatorów\Q
i\E
.Lub możesz zrobić tak, jak powiedział eugene y i użyć funkcji indeksu . Tylko słowo ostrzeżenia: indeks zwraca a,
-1
gdy nie może znaleźć dopasowania zamiastundef
lub0
.Tak więc jest to błąd:
Będzie źle, jeśli
s1.domain.com
znajduje się na początku twojego ciągu. Osobiście byłem tym palony więcej niż raz.źródło
index()
jest szybszy niż wyrażenia regularne w prostym przypadku?=~
,index()
,~~
imatch::simple
wszystko wydawało się niecoawk
-ward ...: - \domain.com
dopasowaćsubdomain.domain.com
używając powyższego REGEX, jakieś pomysły?Przykład podłańcucha bez rozróżniania wielkości liter
To jest rozszerzenie odpowiedzi Eugene'a, która konwertuje ciągi znaków na małe litery przed sprawdzeniem podłańcucha:
źródło
fc
jest to zalecane wlc
przypadku porównań bez uwzględniania wielkości liter.