2010-04-07 7 views
-1

J'ai un $link_item variable, il est utilisé avec echo et donne les chaînes commeComment supprimer un texte d'une variable? (Php)

<span class="name">Google</span>http://google.com 

Comment supprimer "<span class="name">Google</span>" de la chaîne?

Il devrait donner juste "http://google.com".

Entendu cela peut être fait avec regex(), s'il vous plaît aider.

+2

Quelle est la différence à chaque fois? Qu'est-ce qui peut différer, et qu'est-ce qui reste pareil? – Ikke

+1

Je suis d'accord avec @Ikke. S'il vous plaît donner quelques autres exemples du contenu de '$ link_item'. L'exemple actuel ne fournit pas suffisamment d'informations pour une solution. – Gordon

+0

@Glister: résolu, s'il vous plaît voir ma réponse. Merci – Sarfraz

Répondre

1

Résolu:

$contents = '<span class="name">Google</span>http://google.com'; 
$new_text = preg_replace('/<span[^>]*>([\s\S]*?)<\/span[^>]*>/', '', $contents); 
echo $new_text; 

// outputs -> http://google.com 
+0

comme le mien. espérons que cela fonctionne, merci Sarfraz. – Happy

+0

@Glister: Vous êtes les bienvenus :) – Sarfraz

3

Sans regex:

echo substr($link_item, stripos($link_item, 'http:')) 

Mais cela ne fonctionne que si la première partie (à savoir <span class="name">Google</span>) ne contient jamais http:. Si vous pouvez assurer ceci: ici vous allez :)

Référence: substr, stripos

Mise à jour:

Comme @Gordon souligne dans son commentaire, mon code est en train de faire la même chose que strstr() déjà Est-ce que. Je l'ai juste mis ici au cas où on ne lis pas les commentaires:

echo strstr($link_item, 'http://'); 
+1

version plus compliquée de 'strstr ($ link_item, 'http: //');' n'est-ce pas? – Gordon

+0

merci @Felix – Happy

+0

@Gordon, ne perdez pas votre temps :) – Happy

0

N'utilisez pas une regex. Utilisez un HTML parser pour extraire uniquement le texte que vous voulez.

+2

Voulez-vous vraiment charger un module externe juste pour cette substitution triviale? –

+0

Je pense que les gens ont juste peur d'une autre fusion: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags Et bien sûr cela dépend si le HTML de '$ link_item' change toujours, ce que je devine peut-être un jour. –

3
$string = '<span class="name">Google</span>http://google.com'; 
$pieces = explode("</span>",$string); 
//In case there is more than one span before the URL 
echo $pieces[count($pieces) -1]; 
+1

Qu'en est-il des multiples, imbriqués ou aucun '' s? Bien sûr, nous ne pouvons supposer ici que le PO ne donne pas assez d'informations. Donc "en supposant" qu'il n'y aura jamais de '' après l'URL, peut-être que c'est plus robuste: 'echo $ pieces [count ($ pieces) -1]' (juste le dernier élément du tableau). –

+0

$ chaîne n'a pas toujours "". Merci pour essayer. – Happy

+0

@Glister: Comment pouvons-nous savoir? –

0

Made me

$link_item_url = preg_replace('@<span[^>]*?>.*?</span>@si', '', $link_item); 

Cela permettra d'éliminer toute <span + something + </span> de variables $link_item.

Merci pour tout.

+0

pourquoi moins? Je pense que c'est la meilleure solution – Happy

+0

En effet, downvote compensé –

+0

-1 pour perdre du temps en posant une question, le PO pourrait apparemment se résoudre sans aide. Je donnerais un autre -1 pour l'abus de Regex et un autre -1 pour ne pas fournir l'information demandée à la question. Mais je ne peux descendre qu'une seule fois. – Gordon