Pergunta

Eu tenho um texto, algo assim:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

O que eu quero é manter o Texto desconhecido, mas livre-se do (ALGUM TEXTO CONHECIDO) e (ALGUM OUTRO TEXTO CONHECIDO).

Acho que preg_replace vai me dar o que quero, mas preciso da expressão regular para substituir isso:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

com isso ..

Unknown Text

eu vejo o preg_replace leva 3 parâmetros, o expressão regular, o texto de substituição, e assunto.

Existe uma maneira de passar o valor do texto desconhecido para o parâmetro de texto de substituição, OU, uma maneira de recolocar as partes esquerda e direita (ALGUM TEXTO CONHECIDO) e (ALGUM OUTRO TEXTO CONHECIDO) sem remover o texto desconhecido?Alternativamente, existe um str_replace() solução para isso?

Obrigado

---ATUALIZAR---

A parte (ALGUM OUTRO TEXTO CONHECIDO) pode existir em outros lugares do texto, mas não quero que seja removida, a menos que siga o padrão de (ALGUM TEXTO CONHECIDO)Texto desconhecido(ALGUM OUTRO TEXTO CONHECIDO).Estou pensando que as sugestões iniciais de str_replace não funcionariam por causa disso.

Foi útil?

Solução

Quais são as condições?Se você tem:

(ALGUM OUTRO TEXTO CONHECIDO)Texto desconhecido(ALGUM TEXTO CONHECIDO)

(ou seja,se o texto entre colchetes for trocado), você ainda deseja removê-lo?O texto conhecido deve estar sempre no início ou no final da linha?Se a resposta for sim para qualquer uma dessas perguntas, provavelmente será melhor usar um regex.Algo assim:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

As barras invertidas (\) são para escapar do ( e ) caracteres, que têm um significado especial em expressões regulares.Presumo que você queira alterar o conteúdo - você pode removê-los nesse momento.

Nesta regex, o . é um operador especial que significa "qualquer personagem". Ele corresponderá a qualquer personagem.O + significa "um ou mais" e é um modificador do operador anterior - juntos, podem ser interpretados como correspondendo a "um ou mais de qualquer caractere".O ( e ) caracteres são usados ​​para capturar seções do texto em um subpadrão.Ao abranger o .+ entre parênteses, capturamos isso para ser usado na substituição.A primeira seção cercada por ( e ) são rotulados $1 pelo mecanismo regex.Se tivéssemos mais, eles seriam rotulados $2, $3, e assim por diante.

Se nenhum destes se aplicar, você pode usar o str_replace funcionam conforme mencionado nas outras respostas.

Outras dicas

Você pode simplesmente fornecer ao STR_Place uma matriz das cordas que deseja remover como tal:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

Se você não precisar de qualquer correspondência de padrão inteligente, essa será uma solução mais rápida que o Regex.

Se os dois textos realmente forem conhecidos, você pode fazer isso:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

o que é melhor desempenho do que uma expressão regular. O primeiro argumento é o conjunto de chaves a serem substituídas, o segundo argumento é com o que substituí -lo e o terceiro é o sujeito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top