J'ai le problème suivant.REGEX (PCRE) correspondant seulement si zéro ou une fois
Prenons l'entrée (wikitext)
======hello((my first program)) world======
Je veux correspondre « bonjour », « mon premier programme » et « monde » (notez l'espace).
Mais pour l'entrée.
======hello(my first program)) world======
Je veux correspondre « bonjour (mon premier programme » et « monde »
En d'autres termes, je veux correspondre des lettres, des espaces et de plus tous les symboles simples (pas de double ou plus).
Cela devrait être fait avec les propriétés de caractères unicode comme \ p {L}, \ p {S} ou \ p {Z}, tel que documenté here.
Des idées?
Addendum 1
Le regex vient d'arrêter avant tout symbole double ou de ponctuation en termes unicode, qui est, avant tout \ p {S} {2,} ou \ p {P} {2 ,}. Je n'essaie pas d'analyser tout le wikitext avec ceci, lisez attentivement ma question. La regex que je cherche EST pour la lexer sur laquelle je travaille, et la faire correspondre à de telles entrées simplifiera énormément mon analyseur.
Addendum 2
Le modèle doit travailler avec preg_match()
. Je peux imaginer comment je devrais le diviser d'abord. Peut-être utiliserait-il un peu de lookahead, je ne sais pas, j'ai essayé tout ce que je pouvais imaginer.
En utilisant seulement preg_match()
est une exigence dans la pierre par la mise en œuvre actuelle du lexer. Il doit en être ainsi, car c'est la manière naturelle de fonctionner des lexers: ils correspondent aux séquences du flux d'entrée.
Si vous pouviez penser à "addendum 2" dans la question ce serait génial. L'utilisation de preg_match() est une exigence imposée par l'implémentation actuelle du lexer. Il doit en être ainsi, car c'est la manière naturelle de fonctionner des lexers: ils correspondent aux séquences du flux d'entrée. – Flavius
Merci, ''/((?: [^ \ PS \ pP] | ([\ pS \ pP]) (?! \\ 2)) *)/mu'' l'a fait. Je n'ai pas besoin de faire correspondre le "======" parce que celui-ci est déjà reconnu par le lexeur, et ensuite il met le lexeur dans le contexte de la tentative de faire correspondre l'expression rationnelle que vous m'avez donné. Quoi qu'il en soit, cela a résolu mon problème. – Flavius