Saya membutuhkan fungsi yang mengembalikan substring antara dua kata (atau dua karakter). Saya bertanya-tanya apakah ada fungsi php yang mencapai itu. Saya tidak ingin berpikir tentang regex (well, saya bisa melakukan satu tetapi benar-benar tidak berpikir itu cara terbaik untuk pergi). Pemikiran strpos
dan substr
fungsi. Ini sebuah contoh:
$string = "foo I wanna a cake foo";
Kami memanggil fungsi: $substring = getInnerSubstring($string,"foo");
Ini mengembalikan: "Saya ingin kue".
Terima kasih sebelumnya.
Pembaruan:
Ya, sampai sekarang, saya hanya bisa mendapatkan substring antara dua kata hanya dalam satu string, apakah Anda mengizinkan saya untuk pergi sedikit lebih jauh dan bertanya apakah saya dapat memperluas penggunaan getInnerSubstring($str,$delim)
untuk mendapatkan string yang berada di antara nilai batas, contoh:
$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero foo";
Saya mendapatkan array seperti {"I like php", "I also like asp", "I feel hero"}
.
\Illuminate\Support\Str::between('This is my name', 'This', 'name');
nyaman. laravel.com/docs/7.x/helpers#method-str-betweenJawaban:
Jika string berbeda (yaitu: [foo] & [/ foo]), lihat posting ini dari Justin Cook. Saya menyalin kode-nya di bawah ini:
sumber
Ekspresi reguler adalah caranya:
onlinePhp
sumber
Penggunaan sampel:
sumber
Contoh penggunaan:
Jika Anda ingin menghapus spasi putih di sekitarnya, gunakan
trim
. Contoh:sumber
sumber
gunakan fungsi strstr php dua kali.
output:
"is a great day to"
sumber
Saya suka solusi ekspresi reguler tapi tidak ada yang cocok untuk saya.
Jika Anda tahu hanya akan ada 1 hasil, Anda dapat menggunakan yang berikut:
Ubah SEBELUM dan SETELAH menjadi pembatas yang diinginkan.
Juga perlu diingat fungsi ini akan mengembalikan seluruh string jika tidak ada yang cocok.
Solusi ini multiline tetapi Anda dapat bermain dengan pengubah tergantung pada kebutuhan Anda.
sumber
Bukan pro php tetapi saya baru-baru ini berlari ke tembok ini juga dan inilah yang saya hasilkan.
sumber
Jika Anda menggunakan
foo
sebagai pembatas, maka lihatexplode()
sumber
Contoh:
Ini akan mengembalikan "pria di tengah".
sumber
Jika Anda memiliki beberapa pengulangan dari satu string dan Anda memiliki pola [awal] dan [\ akhir] yang berbeda. Berikut adalah fungsi yang menampilkan array.
sumber
Inilah fungsinya
Gunakan seperti
Output (perhatikan bahwa ia mengembalikan spasi di depan dan pada dan dari string Anda jika ada)
Jika Anda ingin memangkas hasil, gunakan fungsi seperti
Hasil : Fungsi ini akan mengembalikan false jika
$boundstring
tidak ditemukan di$string
atau jika$boundstring
hanya ada sekali$string
, jika tidak mengembalikan substring antara kejadian pertama dan terakhir$boundstring
di$string
.Referensi
sumber
IF
Klausa apa yang Anda bicarakan? mungkin saya membuat kesalahan ketik tapi jujur saja, saya tidak bisa melihat sesuatu yang aneh sekarang. KeduaIF
s saya telah digunakan dalam fungsi di atas memiliki kurung yang tepat di sekitar kondisi. PertamaIF
juga memiliki kurung keriting (kurung kurawal) yang mengelilingi 2 baris blok, keIF
- 2 tidak perlu mereka karena itu kode baris tunggal. Apa yang saya lewatkan?Peningkatan jawaban Alejandro . Anda bisa membiarkan
$start
atau$end
argumen kosong dan itu akan menggunakan awal atau akhir dari string.sumber
Menggunakan:
sumber
Kode sedikit ditingkatkan dari GarciaWebDev dan Henry Wang. Jika $ awal kosong atau $ akhir diberikan, fungsi mengembalikan nilai dari awal atau ke akhir $ string. Juga tersedia opsi Inklusif, apakah kami ingin menyertakan hasil pencarian atau tidak:
sumber
Saya harus menambahkan sesuatu ke pos Julius Tilvikas. Saya mencari solusi seperti ini yang dia jelaskan di posnya. Tapi saya pikir ada kesalahan. Saya tidak benar-benar mendapatkan string di antara dua string, saya juga mendapatkan lebih banyak dengan solusi ini, karena saya harus mengurangi panjang string start. Ketika melakukan ini, saya benar-benar mendapatkan String di antara dua string.
Inilah perubahan solusi saya:
Salam
V
sumber
Coba ini, Ini berfungsi untuk saya, dapatkan data di antara kata uji .
sumber
Dalam
strpos
gaya PHP ini akan kembalifalse
jika tanda awalsm
atau tanda akhirem
tidak ditemukan.Hasil ini (
false
) berbeda dari string kosong yang Anda dapatkan jika tidak ada antara tanda awal dan akhir.Fungsi hanya akan mengembalikan pertandingan pertama.
Jelas tetapi layak disebutkan bahwa fungsi pertama-tama akan mencari
sm
dan kemudian untukem
.Ini berarti Anda mungkin tidak mendapatkan hasil / perilaku yang diinginkan jika
em
harus dicari terlebih dahulu dan kemudian string harus diurai ke belakang untuk mencarism
.sumber
Ini adalah fungsi yang saya gunakan untuk ini. Saya menggabungkan dua jawaban dalam satu fungsi untuk pembatas tunggal atau ganda.
Untuk penggunaan sederhana (mengembalikan dua):
Untuk mendapatkan setiap baris dalam tabel ke array hasil:
sumber
saya menggunakan
Ganti <TAG> untuk pembatas apa pun yang Anda inginkan.
sumber
versi yang diedit dari apa yang dimasukkan oleh Alejandro García Iglesias.
Ini memungkinkan Anda untuk memilih lokasi spesifik dari string yang ingin Anda dapatkan berdasarkan pada berapa kali hasil ditemukan.
pemakaian:
strpos memiliki input opsional tambahan untuk memulai pencarian pada titik tertentu. jadi saya menyimpan posisi sebelumnya di $ cPos sehingga ketika for loop mengecek lagi, itu dimulai pada akhir dari mana ia tinggalkan.
sumber
Sebagian besar jawaban di sini tidak menjawab bagian yang diedit, saya kira mereka ditambahkan sebelumnya. Ini dapat dilakukan dengan regex, seperti yang disebutkan dalam satu jawaban. Saya memiliki pendekatan yang berbeda.
Fungsi ini mencari $ string dan menemukan string pertama di antaranya $ start dan $ end string, mulai dari $ offset posisi. Kemudian memperbarui posisi $ ofset untuk menunjuk ke awal hasil. Jika $ includeDelimiters benar, itu termasuk pembatas dalam hasilnya.
Jika $ start atau $ end string tidak ditemukan, ia mengembalikan null. Ini juga mengembalikan null jika $ string, $ start, atau $ end adalah string kosong.
Fungsi berikut menemukan semua string yang berada di antara dua string (tidak ada tumpang tindih). Ini membutuhkan fungsi sebelumnya, dan argumennya sama. Setelah eksekusi, $ offset poin ke awal dari string hasil yang terakhir ditemukan.
Contoh:
str_between_all('foo 1 bar 2 foo 3 bar', 'foo', 'bar')
memberi[' 1 ', ' 3 ']
.str_between_all('foo 1 bar 2', 'foo', 'bar')
memberi[' 1 ']
.str_between_all('foo 1 foo 2 foo 3 foo', 'foo', 'foo')
memberi[' 1 ', ' 3 ']
.str_between_all('foo 1 bar', 'foo', 'foo')
memberi[]
.sumber
Menggunakan:
sumber
Saya punya beberapa masalah dengan fungsi get_string_between (), yang digunakan di sini. Jadi saya datang dengan versi saya sendiri. Mungkin itu bisa membantu orang dalam kasus yang sama dengan saya.
sumber
menulis ini beberapa waktu lalu, merasa sangat berguna untuk berbagai aplikasi.
sumber
Dengan beberapa kesalahan menangkap. Secara khusus, sebagian besar fungsi yang disajikan memerlukan $ end untuk eksis, padahal dalam kasus saya, saya membutuhkannya menjadi opsional. Gunakan ini $ end adalah opsional, dan evaluasi untuk FALSE jika $ awal tidak ada sama sekali:
sumber
Versi UTF-8 dari jawaban @Alejandro Iglesias, akan berfungsi untuk karakter non-latin:
sumber
Dapatkan solusi terbaik untuk ini dari tonyspiro
sumber
Ini dapat dengan mudah dilakukan menggunakan fungsi kecil ini:
sumber
Saya telah menggunakan ini selama bertahun-tahun dan berfungsi dengan baik. Mungkin bisa dibuat lebih efisien, tetapi
grabstring ("Test string", "", "", 0) mengembalikan Test string
grabstring ("Test string", "Test", "", 0) mengembalikan string
grabstring ("Test string", "s", "", 5) mengembalikan string
}
sumber