Note : Il s'agit d'une question sur les possibilités des saveurs modernes de regex. Il ne s'agit pas de la meilleure façon de résoudre ce problème en utilisant d'autres méthodes. C'est inspiré par une question précédente mais celle-ci n'est pas limitée aux regex.
Le problème
Dans un ASCII "image"/art/map/string comme :
....X.......
..X..X...X....
X.X...X..X.....
X....XXXXXX.....
X..XXX...........
.....X..........
..............X
..X...........X....
..X...........X....X...
....X.....
J'aimerais trouver une simple formation de ligne verticale de trois X
s :
X
X
X
Le nombre de lignes est variable dans l'image, et la largeur de l'image est variable. chaque est également variable.
La ou les questions
Avec regex (PCRE/PHP, Perl, .NET ou similaire) est-il possible de :
- Déterminer si une telle formation existe
- Comptez le nombre de formations de ce type / faites correspondre le point de départ de chacune d'entre elles (4 dans l'exemple ci-dessus).
0 votes
Quelqu'un peut-il utiliser PHP (fonctions internes) pour calculer N lignes, et la longueur de chacune ? Il existe peut-être un moyen de générer "automatiquement" une regex comme je l'ai fait. ici sous la rubrique "briser les lois de l'expression géographique" ?
1 votes
@HamZa, cela devrait être à propos d'une seule expression régulière générale qui est indépendante de l'entrée. De telles astuces seraient donc de la triche ;-)
1 votes
Sans modifier l'entrée (rotation par exemple) et sans générer "automatiquement" des solutions, je dirais que bonne chance :-)
1 votes
@HamZa défi accepté ;-) 1 est facile dans .NET au moins, et PCRE pourrait être possible aussi. 2. par contre, je ne suis pas sûr que ce soit possible.
0 votes
Fait
$image =~ /(?{ whatever_you_need });
se qualifier ? :)0 votes
@briandfoy avez-vous lu la question ? Plus précisément la première ligne, puis les deux questions finales elles-mêmes, auxquelles je ne pense pas que vous puissiez répondre (et démontrer) sans regex. "Il s'agit d'une question sur les *possibilités des saveurs modernes de regex. "*. Je ne sais pas comment être plus clair. Si vous souhaitez poster du code, vous pouvez le faire à la question dont le lien figure dans le premier paragraphe.
0 votes
Yep, désolé. On dirait que j'ai raté la première phrase.
3 votes
Fait
XXXX
comptent comme 0, 1 ou 2 séquences de 3X
s ?0 votes
@ikegami, horizontal ? 0, car la question ne porte que sur la verticale. Je suppose que l'idée originale est que les matches qui se chevauchent ne doivent pas être comptés. (Maintenant que j'y pense, ce serait difficile.) Si vous pouvez faire une solution purement regex qui compte, même avec des chevauchements, ce serait néanmoins intéressant.
0 votes
Pour votre exemple, pourquoi ne pas inverser la disposition de la matrice de façon à ce que les colonnes situées au-dessous les unes des autres se trouvent sur la même ligne - vous pouvez alors facilement vérifier avec une regex. Ça vous paraît juste ?
3 votes
@hakre il y a déjà deux réponses qui le suggèrent. cependant, il ne s'agit pas d'une solution uniquement regex. cette question est plus de nature académique pour voir jusqu'où les limites de certaines saveurs regex peuvent être poussées. bien sûr... si vous pouvez transposer l'image en utilisant regex seul ce serait impressionnant aussi ;)
0 votes
Pourquoi ne pas avoir opté pour un filtre de Sobel, qui est pour moi comme un regex d'image (avec une matrice ((0,0,0),(1,1,1),(0,0,0)) par exemple).
0 votes
Cette question a été ajoutée à la FAQ sur les expressions régulières de Stack Overflow sous la rubrique "Advanced Regex-Fu".
0 votes
@Qtax Hey mon pote, je me souviens de toi sur IRC il y a plusieurs années :) Je veux juste dire merci pour un excellent post. J'ai posté une solution entièrement fonctionnelle à la question 2 ci-dessous... J'espère que vous aurez la chance de la voir !