Bagaimana cara menghapus bagian dari string? [Tutup]


152

Bagaimana saya bisa menghapus bagian dari string?

String contoh: "REGISTER 11223344 here"

Bagaimana saya bisa menghapus "11223344"dari contoh string di atas?


Pertanyaan Anda tidak jelas / ambigu. Anda menggunakan istilah tersebut remove, tetapi sepertinya Anda maksudkan extractsehingga string yang ditargetkan dapat disimpan dalam database.
mickmackusa

@Makyen Saya merasa cukup yakin bahwa Anda telah merusak pertanyaan untuk membuat banyak jawaban benar. Pikirkan tentang hal ini: mengapa OP ingin menyimpan REGISTER heredalam database?
mickmackusa

2
@mickmackusa menghapus bisa identik dengan mengambil dari, yaitu mengambil 11223344 dari string, saya gagal melihat masalah di sini. Paling buruk itu ambigu, tentu saja tidak "dirusak"
Nick

Baca versi pra-perusak. @Sekarang stackoverflow.com/posts/2192170/revisi Kebenaran akan berubah pikiran. Saya akan senang melihat pertanyaan ini ditutup sebagai Tidak Jelas.
mickmackusa

2
@mickmackusa saya lakukan ... Saya gagal melihat maksud Anda. Jika Anda memiliki masalah besar dengan cara itu seperti yang tertulis mengapa tidak memperbaikinya sendiri
Nick

Jawaban:


220

Jika Anda secara khusus menargetkan "11223344", gunakan str_replace:

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");

4
str_replace ($ search, $ replace, $ subject)
drooh

119

Anda dapat menggunakan str_replace () , yang didefinisikan sebagai:

str_replace($search, $replace, $subject)

Jadi, Anda dapat menulis kode sebagai:

$subject = 'REGISTER 11223344 here' ;
$search = '11223344' ;
$trimmed = str_replace($search, '', $subject) ;
echo $trimmed ;

Jika Anda perlu pencocokan yang lebih baik melalui ekspresi reguler, Anda dapat menggunakan preg_replace () .


2
Jika seseorang membutuhkan pencocokan regex, ada juga preg_replace () us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn

4
Tidak yakin mengapa jawaban ini diposting, ini merupakan duplikat yang lebih panjang dari jawaban Dominic dan duplikat yang lebih pendek dari jawaban Roland ...
CPHPython

23

dengan asumsi 11223344 tidak konstan

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";

10
str_replace(find, replace, string, count)
  • menemukan Diperlukan. Menentukan nilai yang akan ditemukan
  • ganti Diperlukan. Menentukan nilai untuk mengganti nilai dalam find
  • string Diperlukan. Menentukan string yang akan dicari
  • menghitung opsional. Variabel yang menghitung jumlah penggantian

Sebagai per OP contoh:

$Example_string = "REGISTER 11223344 here";
$Example_string_PART_REMOVED = str_replace('11223344', '', $Example_string);

// will leave you with "REGISTER  here"

// finally - clean up potential double spaces, beginning spaces or end spaces that may have resulted from removing the unwanted string
$Example_string_COMPLETED = trim(str_replace('  ', ' ', $Example_string_PART_REMOVED));
// trim() will remove any potential leading and trailing spaces - the additional 'str_replace()' will remove any potential double spaces

// will leave you with "REGISTER here"

1
Bagaimana Anda mengusulkan agar OP menggunakan kode semu ini?
mickmackusa

6

Saat Anda membutuhkan pencocokan berbasis aturan, Anda perlu menggunakan regex

$string = "REGISTER 11223344 here";
preg_match("/(\d+)/", $string, $match);
$number = $match[1];

Itu akan cocok dengan set angka pertama, jadi jika Anda perlu mencoba lebih spesifik:

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];

preg_replace () akan jauh lebih mudah bukan? us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn

1
Pengganti @ElijahLynn mengharuskan Anda untuk menghapus beberapa hal, perubahan di masa depan, atau kebisingan akan pecah. Melakukan ini melalui _replace tetapi _match akan terus bekerja.
TravisO

@ TravisO baik ya, tapi tidak. Kedua hal tersebut hampir sama dengan implementasi fungsi yang bijaksana, dan peluang bahwa perubahan di masa depan memengaruhi mereka adalah sama . Ada kemungkinan yang sama untuk perubahan di masa mendatang hanya pada _match, menjadikan penggunaan ini tidak valid dan _replace masih berfungsi dengan baik. Selain itu, versi biasanya sangat jeli untuk tidak mengerem fungsi sebelumnya, jika memungkinkan.
CT.

Anda tidak perlu grup tangkap di sini. Bahkan, menggunakan grup tangkap tidak perlu membengkak $matcharray. Hapus tanda kurung kemudian akses melalui $match[0].
mickmackusa

5

substr () adalah fungsi php bawaan yang mengembalikan bagian dari sebuah string. Substr fungsi () akan mengambil string sebagai input, bentuk indeks di mana Anda ingin string yang akan dipangkas. dan parameter opsional adalah panjang substring. Anda dapat melihat dokumentasi yang tepat dan contoh kode di http://php.net/manual/en/function.substr.php

CATATAN: indeks untuk string dimulai dengan 0.


Bagaimana Anda mengusulkan agar OP harus menggunakan petunjuk umum Anda untuk mencapai hasil yang diinginkan?
mickmackusa

Saya menemukan jawaban ini tidak jelas dan bernilai rendah.
mickmackusa

1

Secara dinamis, jika Anda ingin menghapus (a) bagian dari (a) indeks tetap string, gunakan fungsi ini:

/**
 * Removes index/indexes from a string, using a delimiter.
 * 
 * @param string $string
 * @param int|int[] $index An index, or a list of indexes to be removed from string.
 * @param string $delimiter 
 * @return string
 * @todo Note: For PHP versions lower than 7.0, remove scalar type hints (i.e. the
 * types before each argument) and the return type.
 */
function removeFromString(string $string, $index, string $delimiter = " "): string
{
    $stringParts = explode($delimiter, $string);

    // Remove indexes from string parts
    if (is_array($index)) {
        foreach ($index as $i) {
            unset($stringParts[(int)($i)]);
        }
    } else {
        unset($stringParts[(int)($index)]);
    }

    // Join all parts together and return it
    return implode($delimiter, $stringParts);
}

Untuk tujuan Anda:

remove_from_str("REGISTER 11223344 here", 1); // Output: REGISTER here

Salah satu penggunaannya adalah untuk mengeksekusi string seperti perintah, yang Anda tahu strukturnya.


1
Ghostdog sudah menyarankan teknik meledak-meledak, tapi aku tidak bisa membayangkan menghibur teknik panjang seperti itu untuk operasi dasar seperti itu.
mickmackusa

0

Cuplikan berikut akan mencetak "DAFTAR di sini"

$string = "REGISTER 11223344 here";

$result = preg_replace(
   array('/(\d+)/'),
   array(''),
   $string
);

print_r($result);

Preg_replace () API menggunakan kami seperti yang diberikan di bawah ini.

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);

Sama sekali tidak ada alasan untuk meneruskan array ke preg_replace()dalam kasus ini. Juga tidak ada manfaat menggunakan kelompok tangkap.
mickmackusa

Saya setuju. Array ditambahkan hanya untuk kenyamanan. Itu bisa diabaikan. itu tidak akan membahayakan. Menambahkan grup tangkap untuk mengecualikan angka. Ini berfungsi sesuai pertanyaan yang diplotkan. Dan modifikasi lebih lanjut dan fine tuning dapat dilakukan berdasarkan individu.
arango_86

Maksud saya adalah, ada inklusi yang tidak perlu dalam cuplikan Anda yang tidak masuk akal untuk dimasukkan.
mickmackusa

-1

Lakukan yang berikut

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER(.*)here/','',$string);

Ini akan mengembalikan "REGISTERdi sini"

atau

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER (.*) here/','',$string);

Ini akan mengembalikan "DAFTAR di sini"


4
Tidakkah akan mengembalikan "REGISTER__di sini", dengan dua kosong (anggap garis bawah sebagai spasi, komentar tidak akan mengizinkan saya dua spasi berikutnya)? Karena spasi sebelum dan sesudah "(. *)".
TechNyquist

6
Jawaban ini SETIDAKNYA 100% salah. Bukti: 3v4l.org/LDLEM mengapa jawaban ini memiliki 15 UV?
mickmackusa
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.