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.....
Nous visons à détecter le modèle suivant :
X X X
où trois X sont alignés verticalement.
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
Démo en ligne : https://regex101.com/r/YxPeXe/1
Solution indirecte
Pour compter le nombre de formations, nous pouvons effectuer la substitution suivante :
regex =>
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!