使用带有preg_match的分隔符

时间:2013-11-20 19:16:41

标签: php preg-match

我很难理解preg_match功能。例如,更好的方法

$subject="XY=abC%3Fedr%3Damp;35"

我正在尝试提取

  

BC%3Fed

使用preg_match并将其存储在变量

if(preg_match($pattern, $subject, $matches))
            {
                $string = $matches[1];
            }
echo $string;

以下是我用于$ pattern

的不同变体

我想用@作为分隔符

@bC(.*?)@
@bC.*?@

我只是不明白为什么它不起作用,我想$ pattern中有问题。

请不要使用复杂的正则表达式并尝试修复我的尝试,因为这里的目的是了解preg_match如何工作以及这里有什么问题。

此致

2 个答案:

答案 0 :(得分:1)

使用@作为分隔符是可以的,但正则表达式是错误的。我想你想要:

@(bC.*?)r@ // matches @bC and the following characters unless and 'r' (see comments)

学习正则表达式语法的一个很好的起点是PCRE manual


示例:

$subject="XY=abC%3Fedr%3Damp;35";
$pattern="@(bC.*?)r@";

preg_match($pattern, $subject, $matches);
$string = $matches[1];

echo $string; // bC%3Fed

答案 1 :(得分:1)

?之后。*切换模式的贪婪。默认模式是贪婪的,他们试图找到最长的匹配。那么你 。*?指任何字符,任何计数,最小匹配。因为在此之后没有任何内容可以锚定它,所以最小的匹配是空字符串。