Saya hanya ingin tahu bagaimana saya bisa menghapus semuanya setelah substring tertentu dalam PHP
ex:
Posted On April 6th By Some Dude
Saya ingin memilikinya sehingga menghapus semua teks termasuk, dan setelahnya, sub string "Dengan"
Terima kasih
Jawaban:
Dalam bahasa Inggris yang sederhana: Beri saya bagian dari string mulai dari awal dan berakhir pada posisi di mana Anda pertama kali bertemu pembatas.
sumber
Jika Anda menggunakan PHP 5.3+ lihat flag strstr $ before_needle ()
sumber
FALSE
jika bagian dari string tidak ditemukan. Jadi solusinya bisa:echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]
IMHO squarecandyBagaimana dengan menggunakan
explode
:Keuntungan:
$result[1]
akan kembaliSome Dude
dalam contoh ini)sumber
Anda bisa melakukannya:
sumber
Salah satu metode adalah:
sumber
By
, tetapi oleh karakter apa pun di parameter ke-2. Artinya, itu akan dibagi dengan salah satuB
atauy
. Secara teknis, itu tidak mendapatkan segalanya sebelum aBy
.strtok('a:b', ':')
akan kembalia
tetapistrtok(':b', ':')
akan kembalib
, bukan string kosong seperti yang Anda harapkan.Coba ini.
Pemakaian:
sumber
Jawaban Austin berfungsi untuk contoh kasus Anda.
Secara umum, Anda sebaiknya melihat ke fungsi ekspresi reguler ketika substring yang Anda bagi mungkin berbeda di antara string:
sumber
Anda dapat menggunakan
list
danexplode
fungsi:sumber
sumber
preg_replace
menawarkan satu cara:sumber
Dengan menggunakan ekspresi reguler:
$string = preg_replace('/\s+By.*$/', '', $string)
sumber
Di bawah ini adalah metode yang paling efisien (dengan run-time) untuk memotong semuanya setelah By pertama dalam sebuah string. Jika By tidak ada, string lengkap dikembalikan. Hasilnya dalam $ sResult.
Jika Anda tidak ingin menjadi case sensitive, gunakan stripo bukan strpos. Jika Anda berpikir By mungkin ada lebih dari sekali dan ingin memotong semuanya setelah kejadian terakhir, penggunaan strrpos .
Di bawah ini adalah metode yang kurang efisien tetapi membutuhkan lebih sedikit ruang kode. Metode ini juga lebih fleksibel dan memungkinkan Anda melakukan ekspresi reguler apa pun.
Misalnya, jika Anda ingin menghapus semuanya setelah hari:
Untuk case sensitive, tambahkan pengubah i seperti ini:
Untuk menyelesaikan semuanya dari yang terakhir Dengan jika Anda berpikir mungkin ada lebih dari satu, tambahkan tambahan. * Di awal seperti ini:
Tetapi di sini juga ada cara yang sangat ampuh untuk menggunakan preg_match untuk melakukan apa yang Anda coba lakukan:
Ekspresi reguler mungkin tampak membingungkan pada awalnya, tetapi mereka bisa sangat kuat dan sahabat Anda setelah Anda menguasainya! Semoga berhasil!
sumber
Mengapa...
Ini mungkin berlebihan untuk kebutuhan kebanyakan orang, tetapi, ini membahas sejumlah hal yang tidak dijawab oleh masing-masing individu di atas. Dari barang-barang yang dibahas, tiga di antaranya dibutuhkan untuk kebutuhan saya. Dengan tanda kurung yang ketat dan menjatuhkan komentar, ini masih bisa dibaca hanya pada 13 baris kode.
Ini membahas hal-hal berikut:
Pemakaian:
Kirim string asli, cari karakter / string, "R" / "L" untuk mulai di sisi kanan atau kiri, true / false untuk sensitivitas case. Misalnya, cari case "here" tidak sensitif, dalam string, mulailah dari sisi kanan.
Outputnya adalah "Now Here Are Somes Words". Mengubah "R" menjadi "L" akan menampilkan: "Sekarang".
Inilah fungsinya:
sumber
Gunakan fungsi strstr .
Parameter ketiga
true
memberi tahu fungsi untuk mengembalikan semuanya sebelum kemunculan pertama dari parameter kedua.sumber
strtok($str, 'By')
terlihat lebih sederhanasumber