Je tente d'écrire un composant CF qui analysera le texte wikiCreole. J'ai du mal à trouver les bonnes correspondances avec certaines de mes expressions régulières. Je me sens comme si je pouvais juste faire la tête autour du premier que le reste cliquera. Voici un exemple:Correspondance Regex dans ColdFusion OU condition
Ce qui suit est entrée échantillon:
You can make things **bold** or //italic// or **//both//** or //**both**//.
Character formatting extends across line breaks: **bold,
this is still bold. This line deliberately does not end in star-star.
Not bold. Character formatting does not cross paragraph boundaries.
Ma première tentative a été:
<cfset out = REreplace(out, "\*\*(.*?)\*\*", "<strong>\1</strong>", "all") />
Je réalise qu'il ne correspondrait pas à où le ** est pas donné, et il devrait se terminer là où il y a deux retours chariot.
J'ai donc essayé ceci:
<cfset out = REreplace(out, "\*\*(.*?)[(\*\*)|(\r\n\r\n)]", "<strong>\1</strong>", "all") />
et il est proche, mais pour une raison quelconque, il vous donne ceci:
You can make things <strong>bold</strong>* or //italic// or <strong>//both//</strong>* or //<strong>both</strong>*//.
Character formatting extends across line breaks: <strong>bold,</strong>
this is still bold. This line deliberately does not end in star-star.
Not bold. Character formatting does not cross paragraph boundaries.
Toutes les idées? PS: Si quelqu'un a des suggestions pour de meilleures étiquettes, ou un meilleur titre pour ce poste, je suis tout ouïe.
Cela ne semble correspondre à rien du tout, mais je vois ce que vous dites à propos du [] correspondant seulement un char. Je ne suis pas sûr de ce que le fait: est-il possible, est-il possible que la syntaxe pour cela soit différente dans CF? –
Le (?: ...) est un regroupement sans capture. Il limite l'alternance entre le "**" littéral et le "\ n \ n". D'après ce que je peux voir, la seule différence de syntaxe (ici) est que dans CF un "." correspond à newline où, en Perl, ce n'est pas le cas par défaut. –
D'accord je l'ai changé à ceci: \ * \ * ([^ *] *?) (?: \ * \ * ((? = \ R \ n)) et il commence à fonctionner, sauf que je pense il doit être changé et ne chercher que les retours chariot double. Deux d'affilée est un nouveau paragraphe. Donc serait-ce: \ * \ * ([^ *] *?) (?: \ * \ * | (? = (\ R \ n) {2})) est-ce exact? –