<?php
$rows = [
['`1234567890-=', '~!@#$%^&*()_+'],
['qwertyuiop[]\\', 'QWERTYUIOP{}|'],
['asdfghjkl;\'', 'ASDFGHJKL:"'],
['zxcvbnm,./', 'ZXCVBNM<>?']
];
$wholeregex = [];
foreach($rows as $k => $row) {
$num = $k + 1;
echo "Row $num\n";
$array = [];
foreach($row as $subrow) {
$subarray = array_map('ord', str_split($subrow));
$array = array_merge($subarray, $array);
}
sort($array);
echo "\t" . implode( ' ', $array), "\n";
$ret = [$array[0]];
for($i = 1; $i < count($array); $i++) {
$num = $array[$i];
if(($array[$i - 1] + 1) == $num) {
if( ($i == (count($array) - 1)) || ($array[$i + 1] != ($num + 1)) ) {
$ret[] = array_pop($ret) . '-' . $num;
}
} else {
$ret[] = $num;
}
}
echo "\t" . implode( ' ', $ret), "\n";
$regex = '([';
$subregex = implode( '', array_map(function($el) {
$vals = explode('-', $el);
if(count($vals) == 1) {
return chr($vals[0]);
}
return chr($vals[0]) . '-' . chr($vals[1]);
}, $ret));
$regex .= $subregex;
$regex .= '])';
echo "\t" . $regex, "\n";
$wholeregex[] = $regex;
}
$finalregex = '%' . implode('|', $wholeregex) . '%';
$finalregex = str_replace('(-', '\(-', $finalregex);
echo $finalregex, "\n";
echo strlen($finalregex), "\n";
$input = "a";
preg_match($finalregex, $input, $m);
echo array_flip($m)[$input];
preferences:
32.32 ms | 402 KiB | 5 Q