Twoje pytanie jest niejasne / niejednoznaczne. Używasz tego terminu remove, ale wydaje się prawdopodobne, że masz na myśli extract, że docelowy ciąg może być przechowywany w bazie danych.
mickmackusa
@Makyen Jestem całkiem pewny, że zdewastowałeś pytanie i poprawiłeś wiele odpowiedzi. Pomyśl o tym: dlaczego PO miałby chcieć zapisać REGISTER herew bazie danych?
mickmackusa
2
@mickmackusa remove może być synonimem take away from, czyli wyjęcie 11223344 z ciągu, nie widzę tutaj problemu. W najgorszym przypadku jest to niejednoznaczne, na pewno nie jest „zdewastowane”
Nick
Przeczytaj wersje sprzed wandalizmu. @Nick stackoverflow.com/posts/2192170/revisions Prawda zmieni Twoje zdanie. Byłbym szczęśliwy, gdyby to pytanie zostało zamknięte jako niejasne.
mickmackusa
2
@mickmackusa Zrobiłem ... Nie rozumiem, o co ci chodzi. Jeśli masz tak duży problem ze sposobem, w jaki został napisany, dlaczego nie rozwiązać go samodzielnie
Nick
Odpowiedzi:
220
Jeśli kierujesz konkretnie na „11223344”, użyj str_replace:
wymienić Wymagane. Określa wartość, która ma zastąpić wartość w funkcji find
ciąg Wymagany. Określa ciąg do wyszukiwania
liczyć Opcjonalnie. Zmienna zliczająca liczbę zastąpień
Jak na przykładzie OP:
$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"
Zastąpienie @ElijahLynn wymaga usunięcia rzeczy, przyszłe zmiany lub hałas mogą się zepsuć. Robi to za pomocą _replace, ale _match będzie nadal działać.
TravisO
@TravisO cóż, tak, ale nie. Te dwie są prawie tymi samymi funkcjami pod względem implementacji, a szanse, że przyszłe zmiany wpłyną na którąkolwiek z nich, są takie same . Istnieje taka sama możliwość przyszłych zmian tylko dla _match, przez co to użycie jest nieprawidłowe, a _replace nadal działa poprawnie. Ponadto wersjonowanie jest zwykle bardzo uważne, aby nie hamować poprzedniej funkcjonalności, jeśli to możliwe.
CT.
Nie potrzebujesz tutaj grupy przechwytywania. W rzeczywistości użycie grupy przechwytywania niepotrzebnie powiększa $matchtablicę. Usuń nawiasy, a następnie uzyskaj dostęp przez $match[0].
mickmackusa
5
substr () to wbudowana funkcja php, która zwraca część ciągu. Funkcja substr () przyjmie łańcuch jako dane wejściowe, postać indeksu, w której chcesz, aby ciąg został przycięty. a opcjonalnym parametrem jest długość podciągu. Odpowiednią dokumentację i przykładowy kod możesz znaleźć na stronie http://php.net/manual/en/function.substr.php
W jaki sposób proponujesz, aby PO wykorzystał twoją ogólną wskazówkę, aby osiągnąć pożądany rezultat?
mickmackusa
Uważam, że ta odpowiedź jest niejasna i mało wartościowa.
mickmackusa
1
Dynamicznie, jeśli chcesz usunąć (a) część (części) z (a) stałych indeksów ciągu, użyj tej funkcji:
/**
* 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 partsif(is_array($index)){foreach($index as $i){
unset($stringParts[(int)($i)]);}}else{
unset($stringParts[(int)($index)]);}// Join all parts together and return itreturn implode($delimiter, $stringParts);}
W Twoim celu:
remove_from_str("REGISTER 11223344 here",1);// Output: REGISTER here
Jednym z jego zastosowań jest wykonywanie ciągów znaków podobnych do poleceń, których strukturę znasz.
Ghostdog już zasugerował technikę wybuchania i implodowania, ale nie wyobrażam sobie zajmowania się tak dalekowzroczną techniką do tak podstawowej operacji.
Nie ma absolutnie żadnego powodu, aby przekazywać tablice preg_replace()w tym przypadku. Nie ma też żadnych korzyści z używania grupy przechwytywania.
mickmackusa
Zgadzam się. Tablica została dodana tylko dla wygody. Można to zaniedbać. nie zaszkodzi. Dodano grupę przechwytywania do wykluczania numerów. Działa to zgodnie z wykreślonym pytaniem. Dalsze modyfikacje i dostrojenie można przeprowadzić w oparciu o indywidualne osoby.
arango_86
Chodzi mi o to, że w twoim fragmencie są niepotrzebne inkluzje, których nie ma sensu.
Czy nie zwróci „REGISTER__tutaj” z dwoma spacjami (podkreślenie jako spacje, komentarz nie pozwoli mi na dwie kolejne spacje)? Ze względu na spacje przed i po „(. *)”.
TechNyquist
6
Ta odpowiedź jest CO NAJMNIEJ 100% błędna. Dowód: 3v4l.org/LDLEM dlaczego ta odpowiedź ma 15 UV?
remove
, ale wydaje się prawdopodobne, że masz na myśliextract
, że docelowy ciąg może być przechowywany w bazie danych.REGISTER here
w bazie danych?Odpowiedzi:
Jeśli kierujesz konkretnie na „11223344”, użyj
str_replace
:źródło
Możesz użyć str_replace () , która jest zdefiniowana jako:
Możesz więc napisać kod jako:
Jeśli potrzebujesz lepszego dopasowania za pomocą wyrażeń regularnych, możesz użyć preg_replace () .
źródło
zakładając, że 11223344 nie jest stała
źródło
Jak na przykładzie OP:
źródło
Kiedy potrzebujesz dopasowywania opartego na regułach, musisz użyć wyrażenia regularnego
To będzie pasować do pierwszego zestawu liczb, więc jeśli chcesz być bardziej szczegółowy, spróbuj:
źródło
$match
tablicę. Usuń nawiasy, a następnie uzyskaj dostęp przez$match[0]
.substr () to wbudowana funkcja php, która zwraca część ciągu. Funkcja substr () przyjmie łańcuch jako dane wejściowe, postać indeksu, w której chcesz, aby ciąg został przycięty. a opcjonalnym parametrem jest długość podciągu. Odpowiednią dokumentację i przykładowy kod możesz znaleźć na stronie http://php.net/manual/en/function.substr.php
UWAGA: indeks dla łańcucha zaczyna się od 0.
źródło
Dynamicznie, jeśli chcesz usunąć (a) część (części) z (a) stałych indeksów ciągu, użyj tej funkcji:
W Twoim celu:
Jednym z jego zastosowań jest wykonywanie ciągów znaków podobnych do poleceń, których strukturę znasz.
źródło
Poniższy fragment wypisze „ZAREJESTRUJ SIĘ tutaj”
API preg_replace () używa nas, jak podano poniżej.
źródło
preg_replace()
w tym przypadku. Nie ma też żadnych korzyści z używania grupy przechwytywania.Wykonaj następujące czynności
To zwróci „ZAREJESTRUJ się tutaj”
lub
To zwróci „ZAREJESTRUJ SIĘ tutaj”
źródło