php preg_match соответствует неправильным предметам? - PullRequest
1 голос
/ 17 августа 2011

Я действительно не понимаю, почему, но PHP preg_match сопоставляет неправильные темы в определенных.

Например, в этих 4 строках я ожидаю получить "match 2" в качестве вывода, но я получаювместо этого все соответствует (совпадение с 1 по 4)

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'arnesdemanoTh.php'))
echo 'match 1';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'arnesdemanoTh.swf'))
echo 'match 2';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'arnesdemanoTh1.gif'))
echo 'match 3';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'arnesdemanoTh2.gif'))
echo 'match 4';

В этом случае я получаю «соответствие 2» в качестве вывода, как и ожидалось

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'bang.php'))
echo 'match 1';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'bang.swf'))
echo 'match 2';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'bang1.gif'))
echo 'match 3';

if (preg_match("/.bin|.d64|.dcr|.gb|.gbc|.htm|.html|.nes|.prg|.sna|.swf|.z80/i", 'bang2.gif'))
echo 'match 4';

Что я делаю неправильно?

Большое спасибо за совет!

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Вам нужно выйти из "." (точка), поставив перед ним обратную косую черту, ex \.

$filename = "dvdrip.bin"

preg_match_all('/(\.bin|\.d64|\.dcr|\.gb|\.gbc|\.htm|.html|\.nes\|.prg|\.sna|\.swf|\.z80)/i', $filename, $match, PREG_PATTERN_ORDER);
$match = $match[1][0];

echo $match // echo's ".bin" 
1 голос
/ 17 августа 2011

Вам нужно избегать периодов, \. вместо ..В противном случае . соответствует любой букве, поэтому «arnes» соответствует .nes.

0 голосов
/ 17 августа 2011

вам нужно уйти от " так как это будет соответствовать любому персонажу. поэтому вместо ".bin" используйте \ .bin. в первом наборе строк имя файла совпадает с .nes.

...