2011-11-09 3 views
1

Ceci est une regex simple globale ....Regex ne correspond pas à attendre comme

$text = preg_replace('#<sup>'.$key.'(\D*)(?=</sup>)#s', "<sup>".$val."</sup>\\1", $text); 

Je suis en train de faire correspondre quoi que ce soit entre <sup>[insert integer] et </sup>, et déplacer quoi que ce soit à l'intérieur du </sup> qui ne devrait pas être là . Le problème est qu'il ne correspond même pas <sup>122</sup> quand $key = 122

Y at-il quelque chose que je manque évidemment ici?

Un échantillon de mes données:

ParagraphStyletablebullet><t name=Normal>Office &amp; home visits <i>(includes retail health clinic &amp; online clinic visit)</i></t></p>|$25/visit <sup><br></sup>(<i>deductible waived</i>) <sup>2 aSDF</sup>|30%|||| 
+1

Et où est le '' dans vos données d'échantillon? – mario

+0

'$ key' est' 122' – Webnet

Répondre

1

Je ne sais pas comment vous écrivez ceci en PHP et je suis pas sûr de ce que vous avez besoin :), mais c'est ce que je suis en utilisant « L'entraîneur Regex »

Expression régulière:

(<sup>)(\d*)(.*?)(</sup>) 

chaîne Exemple:

ParagraphStyletablebullet><t name=Normal>Office &amp; home visits <i> 
(includes retail health clinic &amp; online clinic visit)</i></t> 
</p>|$25/visit <sup><br></sup>(<i>deductible 
waived</i>) <sup>2 aSDF</sup>|30%|||| 

Remplacer chaîne ment:

\1\2\4\3 

résultat de remplacement:

ParagraphStyletablebullet><t name=Normal>Office &amp; home visits <i> 
(includes retail health clinic &amp; online clinic visit)</i></t> 
</p>|$25/visit <sup></sup><br>(<i>deductible 
waived</i>) <sup>2</sup> aSDF|30%|||| 
+0

Merci, '# () (2) (\ D *) () # s' travaillé! – Webnet

0

Je pense que ce doesen't travail parce que votre échantillon a seulement <sup>2 ASD</sup> en elle. Sinon, la regex devrait fonctionner sur votre échantillon.

Il peut s'agir d'un problème car il peut y avoir des imbrications <sup>122 ASD <sup> af </sup> </sup>.

Mais c'est l'analyse syntaxique html ou si c'est juste du texte, ce n'est peut-être pas un problème. La récursivité peut être effectuée avec un moteur de regex Perl ou C#. Si elle était moi, je refais l'expression rationnelle de ne pas permettre la nidification de <sup>:

Il pourrait y avoir d'autres préoccupations.