fork download
  1. <?php
  2.  
  3. function masktoreg($mask, $last = true, $isfilemask = true)
  4. {
  5. if (!empty($mask) && $mask{0} == '/') return $mask; // это уже регулярка
  6. if($isfilemask){
  7. $star='[^:/\\\\\\\\]';//
  8. $mask=explode('|',$mask);
  9. } else {
  10. $star='.';//
  11. $mask=array($mask);
  12. }
  13. /* so create mask */
  14. $regs = array(
  15. '~\[~' => '@@0@@',
  16. '~\]~' => '@@1@@',
  17. '~[\\\\/]~' => '@@2@@',
  18. '/\*\*+/' => '@@3@@',
  19. '/\./' => '\.',
  20. '/\|/' => '\|',
  21. '/\*/' => $star . '*',
  22. '/\?/' => $star,
  23. '/#/' => '\#',
  24. '/@@3@@/' => '.*',
  25. '/@@2@@/' => '[\/\\\\\\\\]',
  26. '/@@1@@/' => '\]',
  27. '/@@0@@/' => '\[',
  28. );
  29. $r=array();
  30. foreach($mask as $m)
  31. array_keys($regs), array_values($regs), $m
  32. ) . ($last ? '$' : '');
  33. return '#' . implode('|',$r). '#iu';
  34. }
  35.  
  36. $files=[
  37. 'd:\\windows\\system\\drivers\\ets\\host',
  38. 'd:\\windows\\system\\drivers\\ets\\host.',
  39. '/usr/local/bin/php/php.ini',
  40. ] ;
  41. $mask=[
  42. '*',
  43. '*.*',
  44. '*.ini|*.?',
  45. ];
  46.  
  47. foreach($files as $f){
  48. echo "\n";
  49. foreach($mask as $m ){
  50. echo $f.'>'.$m.'>>'.masktoreg($m).'='.(preg_match(masktoreg($m),$f)?'yes':'no')."\n";
  51. }
  52. }
Success #stdin #stdout 0.02s 52432KB
stdin
Standard input is empty
stdout
d:\windows\system\drivers\ets\host>*>>#[^:/\\]*$#iu=yes
d:\windows\system\drivers\ets\host>*.*>>#[^:/\\]*\.[^:/\\]*$#iu=no
d:\windows\system\drivers\ets\host>*.ini|*.?>>#[^:/\\]*\.ini$|[^:/\\]*\.[^:/\\]$#iu=no

d:\windows\system\drivers\ets\host.>*>>#[^:/\\]*$#iu=yes
d:\windows\system\drivers\ets\host.>*.*>>#[^:/\\]*\.[^:/\\]*$#iu=yes
d:\windows\system\drivers\ets\host.>*.ini|*.?>>#[^:/\\]*\.ini$|[^:/\\]*\.[^:/\\]$#iu=no

/usr/local/bin/php/php.ini>*>>#[^:/\\]*$#iu=yes
/usr/local/bin/php/php.ini>*.*>>#[^:/\\]*\.[^:/\\]*$#iu=yes
/usr/local/bin/php/php.ini>*.ini|*.?>>#[^:/\\]*\.ini$|[^:/\\]*\.[^:/\\]$#iu=yes