我真的不明白为什么,但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';
我做错了什么?
非常感谢你的建议!
答案 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。
匹配