function mask2pattern($mask)
{
$mask = strtolower($mask);
$u = '';
for($i=0;$i<strlen($mask);$i++)
{
$char = $mask{$i};
$part = '';
$f = FALSE;
if (($p = strpos($u,$char)) !== FALSE) {$f = TRUE; $part = '\\'.($p+1);}
elseif ($char == '?') {$part = '.';}
elseif ($char == '*') {$part = '.*';}
else {$f = TRUE; $part = '(.)'; $u .= $char;}
if ($f)
{
$h = array();
for($j=0;$j<strlen($u);$j++) {if ($u{$j} != $char) {$h[] = '\\'.($j+1);}}
if (count($h) > 0) {$part = '(?!'.implode('|',$h).')'.$part;}
}
$pattern .= $part;
}
return '~^'.$pattern.'$~';
}
$string = 'pxfABCCXYYZdgf';
$mask = '???abccxyyz???';
$pattern = mask2pattern($mask);
var_dump($pattern);
$result = preg_match($pattern,$string) > 0;
var_dump($result);
// bool(true)
Хмтекст: "qweabcdseixyz". Рег должен вернуть: "abc" и "xyz"
$string = 'qweabcdseixyz';
$found = array();
for($i=0;$i<strlen($string);$i++) {$found[] = $string{$i};}
natsort($found);
$sorted = join('',$found);
$found = array();
for($i=0;$i<=strlen($sorted)-3;$i++)
{
$sub = substr($sorted,$i,3);
if (strpos($string,$sub) !== FALSE) {$found[] = $sub;}
}
$found = array_unique($found);
var_dump($found);
/*
array(3) {
[0]=>
string(3) "abc"
[1]=>
string(3) "bcd"
[2]=>
string(3) "xyz"
}
*/
$string = 'weabcdseiqxyz';
Вы это подумав написали?если нет - так быстрее.
