php preg_match匹配错误的主题?

时间:2011-08-17 16:52:20

标签: preg-match

我真的不明白为什么,但PHP preg_match匹配某些错误的主题。

例如,在这4行中,我希望得到“匹配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 个答案:

答案 0 :(得分:1)

您需要逃避期间\.而不是.。否则.匹配任何字母,因此“arnes”匹配.nes

答案 1 :(得分:1)

你需要在它前面放一个反斜杠, 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" 

答案 2 :(得分:0)

你需要逃避“。”因为它会匹配任何角色。因此,而不是“.bin”使用\ .bin。在第一组行中,文件名与.nes。

匹配