Mam ciąg znaków i chciałbym uzyskać wszystko po określonej wartości. Ciąg zawsze zaczyna się od zestawu liczb, a następnie podkreślenia. Chciałbym dostać resztę ciągu po podkreśleniu. Na przykład, jeśli mam następujące ciągi i chciałbym zwrócić:
"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
Jak mogę zrobić coś takiego?
if (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
substr($data, (strrpos($data, '_') ?: -1) +1)
.function StrAfterStr($S, $H) { return (($P = strpos($S, $H)) !== false) ? substr($S, $P + 1) : false; }
strtok
jest pomijaną funkcją w tego typu sprawach. Ma to być dość szybkie.Pusty ciąg, taki jak ten, wymusi zwrócenie reszty ciągu.
NB, jeśli po znaku „_” nie było nic, otrzymano by
FALSE
wartość, dla$allTheRest
której, zgodnie z dokumentacją , należy przetestować ===, aby odróżnić ją od innych fałszywych wartości.źródło
strtok('a_b', '_')
powrócia
alestrtok('_b', '_')
wrócib
, nie pusty ciąg jak można się spodziewaćOto metoda przy użyciu
explode
:lub:
Określając
2
dlalimit
parametruexplode()
, układ wraca z maksymalnie 2 elementów rozdzielonych przez ogranicznik łańcucha. Zwracając 2nd element ([1]
), zwróci resztę ciągu.Oto kolejna jedna linijka za pomocą
strpos
(zgodnie z sugestią @flu ):źródło
jeśli ktoś potrzebuje wyodrębnić pierwszą część ciągu, może spróbować,
Pytanie:
Wynik:
This_is_a_string
źródło
Inny prosty sposób, używając strchr () lub strstr () :
źródło
W jednym stwierdzeniu byłoby to.
źródło
Używam strrchr (). Na przykład, aby znaleźć rozszerzenie pliku, używam tej funkcji:
źródło