Ben düzenli ifadeler HTML ayrıştırmak için iyi bir yol olmadığını Brian ile katılıyorum, ama düzenli ifadeler kullanmak gerekiyorsa, sen belirteçleri dize bölme ve daha sonra her bir simgenin üzerinde regexpi çalıştırmayı deneyebilirsiniz.
Ben ifade <sup>®</sup>
üzerine preg_split
HTML etiketleri dize bölmek için kullanarak, hem de kulüpler - bu ya zaten simge {[(2)] olmayan metni bırakacak } veya belirteçleri gibi bir etiket. Daha sonra her bir belirtecinin, ®
ile ikame edilmiş olabilir <sup>®</sup>
,
$regex = '/(<sup>®<\/sup>|<.*?>)/i';
$original = '<div>asd® asdasd. asd<sup>®</sup>asd <img alt="qwe®qwe" /></div>';
// we need to capture the tags so that the string can be rebuilt
$tokens = preg_split($regex, $original, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
/* $tokens => Array
(
[0] => <div>
[1] => asd® asdasd. asd
[2] => <sup>®</sup>
[3] => asd
[4] => <img alt="qwe®qwe" />
[5] => </div>
)
*/
foreach ($tokens as &$token)
{
if ($token[0] == "<") continue; // Skip tokens that are tags
$token = substr_replace('®', '<sup>®</sup>');
}
$tokens = join("", $tokens); // reassemble the string
// $tokens => "<div>asd<sup>®</sup> asdasd. asd<sup>®</sup>asd <img alt="qwe®qwe" /></div>"
Bu naif bir yaklaşım olduğunu, ve beklendiği gibi çıktı biçimlendirilmiş değilse sizin istediğiniz gibi (düzenli ifade ;) HTML ayrıştırma için iyi değil, tekrar) ayrıştırmak olmayabilir unutmayın