Ben başka bir etiket yerine bir php düzenli ifade ihtiyaç

4 Cevap php

İşte yapabilmek için gerekenler:

Ben aşağıdaki etiketi eşleşmesi gerekir:

<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>

Ben bir HTML3 uyumlu etiketi ile yayılma yerine, ama aradaki metni tutmak gerekir. Nihai etiketi değiştirme sonra bu gibi görünmelidir:

<u>text sample</u>

Ben sadece düzenli ifadelerle iyi değilim ve cevap ile gelip görünmüyor olabilir.

Şimdiden teşekkür ederim.

4 Cevap

Regular expressions are not designed for tag manipulation.

Eğer devam yuvalama herhangi bir form varsa, bu dağınık olur.

Ancak, sağlanan çok basit bir örnek verilmiştir belki de bunu yapabilirsiniz:

$MyString = preg_replace
	( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/'
	, '<u>$1</u>'
	, $MyString
	);


But this is flawed in many ways, and you are much better off using a tool designed for manipulating tags instead.

Have a look at DOMDocument->loadHTML() ve related functions.

: Bu gibi birçok satır gerekir

preg_replace('|<SPAN style="TEXT-DECORATION: underline">(.+?)</SPAN>|', '<u>$1</u>', $text);
preg_replace('|<SPAN style="FONT-WEIGHT: bold">(.+?)</SPAN>|', '<b>$1</b>', $text);
preg_replace('|<SPAN style="FONT-STYLE: italic">(.+?)</SPAN>|', '<i>$1</i>', $text);

vb etiketleri exactly (çok basit bir makine tarafından oluşturulan HTML dışında genellikle böyledir,) bu düzenli ifadeler maç olmayacak olasılığı varsa, düzenli ifadeler ile bunu fiendishly karmaşık hale rağmen, ve bazı tür bir çözümleyici kullanarak daha iyi olurdu.

Verdiğin temel Örneğin.

<?php 
$string = '<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>';
$pattern = '/<SPAN style=\"TEXT-DECORATION: underline\">(.+?)<\/SPAN>/';
$replacement = '<u>$1</u>'
echo preg_replace($pattern,$replacement,$string);
?>

will do the trick. The pattern regex is quite easy - it's exactly what you're looking for (with quotes and '/' escaped) with a (.+?) which says to include all possible characters until the close of the SPAN tag. This assumes that you're code is consistently formatted, you could append a 'i' to the end of $pattern to make it case-insensitive.

Bu gerçekten bunu yapmanın doğru yolu olmadığını unutmayın.