J'ai besoin d'aide pour remplacer mon BBCode. En ce moment je suis en train de faire ce qui suit pour rechercher et remplacer bbcode:Regex pour bbcode semble échouer sur des phrases longues
$bbMatch[0] = '/(\[b\])(.*)(\[\/b\])/';
$bbReplace[0] = '<strong>${2}</strong>';
$bbMatch[1] = '/(\[url\])(.*)(\[\/url\])/';
$bbReplace[1] = '[url=${2}]${2}[/url]';
$bbMatch[2] = '/(\[url=)(.+)(\])(.+)(\[\/url\])/';
$bbReplace[2] = '<a href="${2}" target="_blank">${4}</a>';
$bbMatch[3] = '/(\[s\])(.*)(\[\/s\])/';
$bbReplace[3] = '<span style="text-decoration: line-through;">${2}</span>';
$bbMatch[4] = '/(\[u\])(.*)(\[\/u\])/';
$bbReplace[4] = '<span style="text-decoration: underline;">${2}</span>';
$bbMatch[5] = '/(\[i\])(.*)(\[\/i\])/';
$bbReplace[5] = '<em>${2}</em>';
// Remove bad characters
$text = htmlspecialchars($text);
// Parse Smilies
$text = preg_replace($bbMatch, $bbReplace, $text);
Le problème ici est que quand une grande phrase est couru à travers cela, il ne parvient pas à trouver la balise de fin. Il montrerait ceci est un exemple:
"Un texte en italique [/ i] avec quelques mots ici [i] aussi le texte en italique
Comme vous pouvez le voir, il montre la balise de fin de la le premier, et l'étiquette de début de la seconde Comment est-ce que je corriger ceci?
qui semble avoir résolu la plupart de mes questions. Ensuite, j'ai remarqué que lorsque la balise de fin n'est pas sur la même ligne que la balise de début, le code bbcode entier ne correspond pas. Une idée de comment réparer ça? –
@Dave: Déposez votre regex, passez à la caisse [Code du babillard (Manuel PHP)] (http://php.net/manual/fr/book.bbcode.php) à la place. – hakre
@Dave ajouter un 'm' après tout votre fin'/'comme:' '/ (\ [i \]) (. *?) (\ [\/I \])/m''. Cela rend la regex multiline. – Paulpro