2010-12-10 4 views
1

J'ai un texte ... et j'ai des paragraphes et des tableaux ... J'ai besoin de remplacer chaque X (un seul caractère kanji japonais pour être précis. .. mais il pourrait être n'importe quel caractère) qui est dans l'une des tables avec <a href="http://example.com/#X">X</a>, mais seulement ceux qui sont dans les tables, pas en dehors d'eux.Enveloppe <a> balise des caractères spécifiques dans les tableaux HTML avec regex & PHP

Il peut y avoir plusieurs X dans une seule table afin preg_replace('#<td>(X)#','replacewith',$source) ne fonctionnerait pas car il ne remplace que l'un des X.

Toutes les idées? Merci.

+0

S'il vous plaît clarifier ce que vous demandez (selon ma réponse). – Jonah

+2

"... HTML ... regex ...". Cela m'inquiète et me préoccupe. – Cam

+0

Voir cette réponse: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454: D – Jonah

Répondre

0
$startIndex = strpos($source, '<table'); 

while ($startIndex !== false) { 
    $endIndex = strpos($source, '</table>', $startIndex); 

    $excerpt = substr($source, $startIndex, $endIndex - $startIndex); 
    $excerpt = preg_replace('/(X|Y|Z)/', '<a href="http://example.com/#$1">$1</a>', $excerpt); 
    $source = substr_replace($source, $excerpt, $startIndex, $endIndex - $startIndex); 

    if (strlen($source) < $endIndex) 
     $startIndex = false; 
    else 
     $startIndex = strpos($source, '<table', $endIndex); 
} 

Modifier: fixe, testé, fonctionne.

+0

J'ai beaucoup de tables avec beaucoup de caractères dedans ... ex .: XY ZQ

XY XQ Z QY
XY Qxz etc ... Je dois envelopper tous les X qui sont à l'intérieur avec le lien ... –

+0

@Philip: d'accord, laisse-moi ajuster ma réponse ... – Jonah

+0

C'est presque ça! Cela fonctionne bien, sauf qu'il ne fait qu'emballer le kanji dans la première table ... Je dois le faire pour chaque table du texte. Merci beaucoup pour votre aide! –

Questions connexes