奇怪的未接受的PHP正则表达式模式

时间:2011-05-27 08:05:42

标签: php regex

所以,在尝试修复错误修复错误的过程中,我得出的结论是,以下在php中是不可接受的:

$pattern = "/\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/";
$subject = "\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/";
preg_match($pattern, $subject, $result);

我不知道怎么或为什么 - 我所知道的是,如果我有这条线,那么在这条线之前和之后不同位置的各种单词的各种调试回声不再被回应。在任何地方都没有循环,所以我很困惑为什么这会导致问题。

3 个答案:

答案 0 :(得分:4)

无需在字符串中转义斜杠。 '\/''\\/'相同,即字符串\/

在正则表达式中,如果使用斜杠来终止表达式,\/将转义斜杠。您不需要,只需选择其他终结符,例如#

preg_match('#^/sc2/en/profile/693604/1/EGIdrA/ladder/$#',
           '/sc2/en/profile/693604/1/EGIdrA/ladder/', $result);

preg_match 的单次调用不会暂停程序的执行。但是,可能会发出各种错误和警告 - 例如,您在正则表达式中缺少终止/,从而产生

PHP Warning:  preg_match(): No ending delimiter '/' found

检查服务器的php设置(即error_reportinglog_errors)是否有警告和错误输出配置。在许多系统上,/var/log/apache*/error.log包含所有php错误和警告。请注意,集合display_errors可以修改输出并使其成为无效的XML文档或混淆高级输出缓冲。

答案 1 :(得分:2)

原因如下:

preg_match('/^\/$/', '\/'); // false
preg_match('/^\/$/', '/'); // true

答案 2 :(得分:0)

你不应该在输入字符串中转义斜杠/,它足以在模式中转义它们

preg_match('/^\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/$/',
       '/sc2/en/profile/693604/1/EGIdrA/ladder/', $result);

(或者像phihag所提到的那样,使用ie表示模式终止)