当pattern有特殊符号时如何使用preg_match

时间:2013-12-05 03:18:16

标签: php regex preg-match

如果我的模式有符号,我该如何实现preg_match()?我的模式是

"admin/filemanager"

我的preg_match语法应该是什么?

$line = "sometext/admin/filemanager/sometext";
(preg_match(??, $line, $matches))

3 个答案:

答案 0 :(得分:1)

如果您希望它包含分隔符,只需使用delimiter中的其他字符(不会出现在模式中的字符)。例如,#pattern#而不是/pattern/

如果您不知道其他特殊字符可能会通过,您可以使用preg_quote()将其转义。

答案 1 :(得分:0)

这将是(当然是你的例子)

(preg_match("/[a-z\/]*/i", $line, $matches));

/ i是不区分大小写的。

答案 2 :(得分:0)

以下是使用preg_quote()的快速解决方案:

<?php

$pattern = preg_quote('#admin/filemanager#', '/');
$line    = 'sometext/admin/filemanager/sometext';

preg_match($pattern, $line, $matches);

var_dump($matches);

如果大海捞针的内容不同,该解决方案是理想的,特别是如果它是用户提交的干草堆,特别是如果它将在许多不同的用例下经常执行。

更好的解决方案适用于干草堆内容一致并且由开发人员全资拥有的更加可控的方案,这是一个正确形成的PCRE

<?php

$pattern = '/admin\/filemanager/';
$line    = 'sometext/admin/filemanager/sometext';

preg_match($pattern, $line, $matches);

var_dump($matches);