我很难理解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如何工作以及这里有什么问题。
此致
答案 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)
?之后。*切换模式的贪婪。默认模式是贪婪的,他们试图找到最长的匹配。那么你 。*?指任何字符,任何计数,最小匹配。因为在此之后没有任何内容可以锚定它,所以最小的匹配是空字符串。