2010-09-10 7 views
0

Je veux découpé tout à l'intérieur (balises incluses) du texte, par ex:Comment supprimer cette balise en php?

[url=http://example.com]something[/url] 

mais à une condition, à l'intérieur de la balise [url] il y aurait étiquette [img]. Donc, dernière phrase à couper:

[url=http://example.com]anything[img]something[/url] 

quelqu'un peut-il aider? im mauvais avec des expressions régulières, ou il est plus facile?

+2

yawz. Il est 1h30 du matin ici et le gars de la famille est en train de finir, tout comme la bière, donc le temps de se coucher. Pouvez-vous comprendre comment couper tout à l'intérieur de l'étiquette? Pouvez-vous comprendre si elle contient une sous-chaîne IMG? Oubliez regexp, juste KISS et utilisez un 'if'. La vie est courte, utilisez un 'si' et continuez. – Mawg

+0

Vous auriez besoin de beaucoup de gymnastique regex ... '\\ [url = [^ \\]] * \\]. *? \\ [img \\]. *? \\ [/ url \\] 'correspondrait à tout sur' [url = http: //xxx.com] anythingsomething [/ url] [url = http: //xxx.com] un [img] ythingsomething [/ url] '. – Artefacto

+0

juste curieux, que voulez-vous réellement "découper"? qu'attendriez-vous de chacune de ces équipes? – Mawg

Répondre

1

Que diriez-vous ceci:

<?php 

ini_set('display_errors', 1); 
ini_set('error_reporting', E_ALL | E_STRICT); 

$testCases = array(
    'foo bar baz [url=http://example.com]anything[img]something[/url] foo bar baz', 
    'foo bar baz [url=http://example.com]anythingsomething[/url] foo bar baz', 
    'FOO BAR BAZ [URL=HTTP://EXAMPLE.COM]ANYTHING[IMG]SOMETHING[/URL] FOO BAR BAZ', 
    'FOO BAR BAZ [URL=HTTP://EXAMPLE.COM]ANYTHINGSOMETHING[/URL] FOO BAR BAZ', 
); 

foreach ($testCases as $testCase) { 
    $results[] = preg_replace("{\[url(?!.*?\[img\].*?).*?\[/url\]}is", '', $testCase); 
}; 

print_r($results); 

?> 
+0

presque parfait :), il devrait supprimer quand [img] n'est pas à l'intérieur, et maintenant il retirer quand il est à l'intérieur. Cela peut-il être facilement réparé? – Edwardo

+0

Désolé, je suppose que j'ai mal lu votre commentaire ci-dessus. J'ai modifié l'expression pour retirer ces liens sans la balise IMG. –

+0

fonctionne parfaitement :) thx tellement – Edwardo

0

Je voudrais essayer ces lignes de scripts

$subject = '[url=http]anything[imag]something[/url]'; 
$pattern = '@^\[url[^].]*\]{1}(.*)\[/url\][email protected]'; 
preg_match($pattern, $subject, $matches); 
echo $matches[1]; //anything[imag]something 

est le résultat de ce que vous voulez?

+0

pas exactement mais sera utile aussi, donc d'abord il ne sera pas supprimer (correspondance) tags ([url]) . Donc, il ne supprime que ce qui est à l'intérieur des balises, mais il doit supprimer tout s'il n'y a pas de balise [img] à l'intérieur. – Edwardo

Questions connexes