Como remover parte de uma string? [fechadas]

152

Como posso remover parte de uma string?

Exemplo de sequência: "REGISTER 11223344 here"

Como posso remover "11223344"da sequência de exemplo acima?

Sidarta
fonte
Sua pergunta não é clara / ambígua. Você está usando o termo remove, mas parece provável que você queira dizer extractpara que a sequência de destino possa ser armazenada no banco de dados.
mickmackusa
@ Makyen Sinto-me bastante confiante de que você vandalizou a pergunta para corrigir muitas das respostas. Pense nisso: por que o OP gostaria de salvar REGISTER hereno banco de dados?
mickmackusa 27/02
2
@mickmackusa remove pode ser sinônimo de take away, ou seja, tirar 11223344 da string, não vejo o problema aqui. Na pior das hipóteses, é ambíguo, certamente não é "vandalizado"
Nick
Leia as versões pré-vandalizadas. @Nick stackoverflow.com/posts/2192170/revisions A verdade vai mudar de idéia. Ficaria feliz em ver esta pergunta encerrada como incerta.
mickmackusa 27/02
2
@mickmackusa eu fiz ... eu não consigo entender o seu ponto. Se você tem um problema tão grande com a forma como está escrito, por que não consertar você mesmo?
Nick

Respostas:

220

Se você estiver segmentando especificamente "11223344", use str_replace:

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");
Dominic Rodger
fonte
4
str_replace ($ search, $ replace, $ subject)
drooh 10/10
119

Você pode usar str_replace () , que é definido como:

str_replace($search, $replace, $subject)

Então você pode escrever o código como:

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

Se você precisar de uma melhor correspondência por meio de expressões regulares, use preg_replace () .

dhorat
fonte
2
Se alguém precisa de correspondência regex há também preg_replace () us2.php.net/manual/en/function.preg-replace.php
Elias Lynn
4
Não sei por que esta resposta foi publicado, é uma duplicata mais longa da resposta de Dominic e uma duplicata mais curto de resposta de Roland ...
CPHPython
23

assumindo que 11223344 não seja constante

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";
ghostdog74
fonte
9
str_replace(find, replace, string, count)
  • Encontre Obrigatório. Especifica o valor a ser encontrado
  • substituir Necessário. Especifica o valor para substituir o valor na localização
  • sequência Obrigatório. Especifica a sequência a ser pesquisada
  • count Opcional. Uma variável que conta o número de substituições

Conforme exemplo de 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"
Stnfordly
fonte
1
Como você propõe que o OP use esse pseudo código?
mickmackusa 28/02
6

Quando você precisa de correspondência baseada em regras, precisa usar regex

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

Isso corresponderá ao primeiro conjunto de números; portanto, se você precisar ser mais específico, tente:

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];
TravisO
fonte
preg_replace () seria muito mais fácil, não? us2.php.net/manual/en/function.preg-replace.php
Elias Lynn
1
A substituição do @ElijahLynn exige que você remova coisas, alterações futuras ou ruídos poderão ocorrer. Fazer isso via _replace, mas _match continuaria funcionando.
TravisO
@ TravisO bem, sim, mas não. Essas duas são quase as mesmas funções em termos de implementação e as chances de mudanças futuras afetarem qualquer uma delas são as mesmas . Existe a mesma possibilidade de futuras alterações apenas no _match, tornando esse uso inválido e _replace ainda funcionando bem. Além disso, o controle de versão geralmente é muito atento a não travar a funcionalidade anterior, se possível.
CT.
Você não precisa de um grupo de captura aqui. De fato, o uso do grupo de captura incha desnecessariamente a $matchmatriz. Retire os parênteses e depois acesse $match[0].
mickmackusa 28/02
5

substr () é uma função php embutida que retorna parte de uma string. A função substr () terá uma string como entrada, o formulário de índice onde você deseja que a string seja aparada. e um parâmetro opcional é o comprimento da substring. Você pode ver a documentação adequada e o código de exemplo em http://php.net/manual/en/function.substr.php

NOTA: o índice de uma sequência começa com 0.

Umair Jabbar
fonte
Como você propõe que o OP use sua dica geral para alcançar o resultado desejado?
mickmackusa 28/02
Acho essa resposta vaga e de baixo valor.
mickmackusa 28/02
1

Dinamicamente, se você deseja remover (a) parte (s) de (a) índice (s) fixo (s) de uma string, use esta função:

/**
 * 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);
}

Para seu propósito:

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

Um de seus usos é executar seqüências de caracteres do tipo comando, que você conhece suas estruturas.

MAChitgarha
fonte
1
O Ghostdog já sugeriu uma técnica de explodir-implodir, mas não consigo imaginar uma técnica tão demorada para uma operação tão básica.
mickmackusa
0

O trecho a seguir imprimirá "REGISTRAR AQUI"

$string = "REGISTER 11223344 here";

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

print_r($result);

A API preg_replace () nos usa como indicado abaixo.

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);
arango_86
fonte
Não há absolutamente nenhuma razão para passar matrizes preg_replace()nesse caso. Também não há nenhum benefício em usar um grupo de captura.
mickmackusa
Concordo. A matriz é adicionada apenas por conveniência. Pode ser negligenciado. não fará mal nenhum. Adicionado grupo de captura para excluir números. Isso está funcionando conforme a pergunta traçada. E outras modificações e ajustes podem ser feitos com base em indivíduos.
arango_86 9/01
O que quero dizer é que há inclusões desnecessárias no seu snippet que não fazem sentido incluir.
mickmackusa 9/01
-1

Faça o seguinte

$string = 'REGISTER 11223344 here';

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

Isso retornaria "REGISTERhere"

ou

$string = 'REGISTER 11223344 here';

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

Isso retornaria "REGISTRAR AQUI"

Elitmiar
fonte
4
Não retornaria "REGISTER__aqui", com dois espaços em branco (pense em sublinhado como espaços, o comentário não me permitirá dois espaços subseqüentes)? Por causa dos espaços antes e depois do "(. *)".
TechNyquist
6
Esta resposta é pelo menos 100% errada. Prova: 3v4l.org/LDLEM por que esta resposta possui 15 UVs?
mickmackusa 27/02