Saya punya string dan saya ingin mendapatkan semuanya setelah nilai tertentu. String selalu dimulai dengan satu set angka dan kemudian garis bawah. Saya ingin mendapatkan sisa string setelah garis bawah. Jadi misalnya jika saya memiliki string berikut dan apa yang ingin saya kembalikan:
"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
Bagaimana saya bisa melakukan sesuatu seperti ini?
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
adalah fungsi yang diabaikan untuk hal semacam ini. Ini dimaksudkan untuk menjadi sangat cepat.String kosong seperti ini akan memaksa sisa string dikembalikan.
NB jika tidak ada sama sekali setelah '_' Anda akan mendapatkan
FALSE
nilai$allTheRest
yang, sebagaimana dinyatakan dalam dokumentasi , harus diuji dengan ===, untuk membedakan dari nilai-nilai palsu lainnya.sumber
strtok('a_b', '_')
akan kembalia
tetapistrtok('_b', '_')
akan kembalib
, bukan string kosong seperti yang Anda harapkanInilah metode dengan menggunakan
explode
:atau:
Dengan menentukan
2
untuklimit
parameter dalamexplode()
, ia mengembalikan array dengan 2 elemen maksimum dipisahkan oleh pembatas tali. Mengembalikan elemen ke-2 ([1]
), akan memberikan sisa string.Berikut ini adalah satu-liner lainnya dengan menggunakan
strpos
(seperti yang disarankan oleh @flu ):sumber
jika ada yang perlu mengekstraksi bagian pertama dari string maka dapat mencoba,
Pertanyaan:
Keluaran:
This_is_a_string
sumber
Cara sederhana lain, menggunakan strchr () atau strstr () :
sumber
Dalam satu pernyataan saja.
sumber
Saya menggunakan strrchr (). Misalnya untuk menemukan ekstensi file saya menggunakan fungsi ini:
sumber