Regex peut-il détecter et compter les motifs « X » verticaux dans l'art ASCII ?

Mary-Kate Olsen
Libérer: 2024-11-16 12:15:03
original
473 Les gens l'ont consulté

Can Regex Detect and Count Vertical

Trouver des modèles X verticaux en ASCII avec Regex

Énoncé du problème

Dans une image ASCII comme ci-dessous :

....X.......
..X..X...X....
X.X...X..X.....
X....XXXXXX.....
X..XXX...........
.....X..........
..............X
..X...........X....
..X...........X....X...
....X.....
Copier après la connexion

Nous visons à détecter le modèle suivant :

X
X
X
Copier après la connexion

où trois X sont alignés verticalement.

Questions

  1. Est-il possible de déterminer si de telles formations existent utiliser une regex ?
  2. Si oui, est-il possible de compter le nombre d'occurrences ?

Réponse à la question 1

Oui, l'expression régulière suivante permet d'identifier la présence de formations verticales en X :

(?xm)                    # ignore comments and whitespace, ^ matches beginning of line
^                        # beginning of line
(?:
    .                    # any character except \n
    (?=                  # lookahead
        .*+\n            # go to next line
        ( ?+ . )       # add a character to the 1st capturing group
        .*+\n            # next line
        ( ?+ . )       # add a character to the 2nd capturing group
    )
)*?                      # repeat as few times as needed
X .*+\n                  # X on the first line and advance to next line
?+                     # if 1st capturing group is defined, use it, consuming exactly the same number of characters as on the first line
X .*+\n                  # X on the 2nd line and advance to next line
?+                     # if 2st capturing group is defined, use it, consuming exactly the same number of characters as on the first line
X                        # X on the 3rd line
Copier après la connexion

Démo en ligne : https://regex101.com/r/YxPeXe/1

Réponse à la question 2

Solution indirecte

Pour compter le nombre de formations, nous pouvons effectuer la substitution suivante :

regex => 
Copier après la connexion

où regex est le modèle ci-dessus. La longueur de chaîne résultante sera égale au nombre de correspondances.

Démo en ligne : https://regex101.com/r/Tx6R63/1

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal