Jump to content


Photo

Copiar String Entre Marcas


  • Faça o login para participar
5 replies to this topic

#1 LuBoc

LuBoc

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Não informado
  • Localidade:Portugal

Posted 29/07/2005, 07:31

Olá galera,

Necessito da vossa ajuda.
Pretendo uma função que me devolva uma sub-string que está numa string (claro!).
Agora, na string existe duas marcas que indicam o Inicio e o Fim da sub-string, tipo:

$Marca_Inicio_SubString = "[Inicio]";
$Marca_Fim_SubString = "[Fim]";

$String_Completa = "
Isto é a string que contém a sub-string, bla, bla,..........(sem dimensão definida)... bla, .......
[Inicio] aqui começa a sub-string, bla bla,.....
..(sem dimensão definida)....bla,.......
[Fim] resto da string..., bla, bla,
.....(sem dimensão definida)... bla, .......
";

Coisas que podem ocorrer:
--> A $String_Completa pode receber uma variável de uma BD e/ou texto de um formulário, o qual já pode conter o caracter aspas ("). Por isso, será necessário converter essas aspas em plicas (') ?


Existe alguma forma de obter a sub-string entre as duas marcas?

Se alguém já tiver algo semelhante ou me possa indicar opções que ajudem a fazer a função agradeço muito.

Agradecimentos antecipados.
LB
»~» LuBoc «~«

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 29/07/2005, 07:49

Opa ... ;)

Dê uma olhada numa função de BBCode que nosso amigo monitor Justice fez à um tempinho atrás: http://forum.wmonlin...howtopic=120950.

Servirá de base para sua adaptação. :rolleyes:

[]’s :DAté mais

#3 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 29/07/2005, 08:05

ou, mais simples que aquilo pelo motivo ser mais simples:


<?
$seutexto="batatinha disse o sequinte:  [Inicio] grande coisa esse lance de pegar uma parte do meio de uma string[Fim], <b>pois</b> sabe que é facil e simples";


$inicio=strpos($seutexto, "[Inicio]");
$string = substr($seutexto, $inicio);    
$fim=strpos($string, "[Fim]");
$string = substr($string, 0, $fim+5);// +5 pq [Fim]  tem 5 caracteres    
$string= str_replace($string, "", $seutexto);

echo $string;
?>

aih vc pode criar uma funçao e tal onde voce forneça como parametros o "inicio" e o "fim", e que calcule o tamanho do marcador de "fim" automaticamente, fiz correndo agora pq to com fome, vou tomar café :lol: .

abraço

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#4 LuBoc

LuBoc

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Não informado
  • Localidade:Portugal

Posted 29/07/2005, 08:43

Olá galera,

Agradeço as respostas... entretanto (vendo as várias funções de manipulação de string's em PHP) descobri como fazer! Mas a ideia passa pelo que referiu Stormbringer, deixo aqui o código todo:

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Obter SUB-STRING de outra STRING com Marcas de Inicio e Fim de Texto</title>
</head>
<body>
<?php

// Esta função devolve uma sub-string delimitada numa string por duas marcas
function sub_string($string_completa,$marca_inicio,$marca_fim){
	// Remover a parte final da string, incluíndo a marca de Fim de Sub-String
 $substring = substr($string_completa,0,strpos($string_completa,$marca_fim));
	// Remover a parte inicial da string, até à marca de Inicio de Sub-String
 $substring = substr($substring,strpos($string_completa,$marca_inicio));
	// "Remover" a Marca de Inicio de Sub-String
 $substring = str_replace($marca_inicio,"",$substring);
 return $substring;
}


  // Variáveis
  $Marca_Inicio_Texto = "[Inicio]";
  $Marca_Fim_Texto    = "[Fim]";
  $String             = "Aqui fica o texto completo, mas o que eu quero é uma
  [Inicio]Sub-String que depois irei mostrar a todos[Fim], e que deve ser
  a correcto e que esteja dentro das marcas definidas!";
  $final = sub_string($String,$Marca_Inicio_Texto,$Marca_Fim_Texto);

 // Mostrar Resultados
 echo "<center><b>RESULTADO</b></center><br>";
 echo "<hr>";
 echo "<b>STRING COMPLETA:</b><br>$String";
 echo "<hr>";
 echo "<b>MARCAS:</b><br>";
 echo "Marca Inicio: $Marca_Inicio_Texto<br>";
 echo "Marca Fim...: $Marca_Fim_Texto<p>";
 echo "<hr>";
 echo "<b>SUB-STRING:</b><p>$final";

?>
</body>
</html>

Quem desejar testar, já sabe... deve Copiar, Colar num ficheiro e gravar com extensão ".php" :P

A função funciona bem... se alguém conseguir optmizar, por favor, diga como.

Obrigadoa todos,
LB
»~» LuBoc «~«

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 29/07/2005, 09:41

A função funciona bem... se alguém conseguir optmizar, por favor, diga como.

Mole ... :P

<?php

$texto = 'Aqui fica o texto completo, mas o que eu quero é uma [Inicio]Sub-String
           que depois irei mostrar a todos[Fim], e que deve ser a correcto e que
           esteja dentro das marcas definidas!';

$er = '~(.*?)\[Inicio\](.*?)\[Fim\](.*?)~sUi';

$parte_desejada = preg_replace($er, '\\2', $texto);

print $parte_desejada;

?>
[]’s :DAté mais

#6 LuBoc

LuBoc

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Não informado
  • Localidade:Portugal

Posted 29/07/2005, 11:35

Oi,

Grande Paulo Freitas... funciona mesmo bem. (y) :D

Isto é que é optimização, excelente.

Obrigado por me (nos) ensinar, valeu.

Abraço,
LB
»~» LuBoc «~«




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq