我有这个网址:../foo::bar{2}233{13}171{1}1{20}0.html
参数在{}
,值在后面。
有了这个,我可以获得一个参数 - 尽管有花括号:
if (false !== strpos($url,'{2}')) {
echo 'success';
} else {
echo 'error';
}
我想获得{}
.
尝试使用preg_match_all()
$str = '../foo::bar{2}233{13}171{1}1{20}0.html';
$pattern = "/\{\d+\}/";
preg_match_all($pattern, $str, $matches);
$prevStart = 0;
foreach($matches[0] as $match)
{
$matchLen = strlen($match);
$matchPos = strpos($str, $match, $prevStart);
// Try to find the position of the next open curly brace
$openCurlyPos = strpos($str, '{', $matchPos + $matchLen);
// In case there is none found (.html comes up next), search for the . instead
if($openCurlyPos === false)
$openCurlyPos = strpos($str, '.', $matchPos + $matchLen);
$length = $openCurlyPos - ($matchPos + $matchLen);
$prevStart = $openCurlyPos;
echo $match.': '.substr($str, $matchPos + $matchLen, $length).'<br />';
}
/*
Result:
{2}: 233
{13}: 171
{1}: 1
{20}: 0
*/
我知道这种方式可能非常多余,但我不知道如何使用正则表达式来做到这一点。这对于人们来说似乎也更容易理解。
使用preg_match_all
您可以提取键和值,这是一个示例模式;
$matches = null;
$returnValue = preg_match_all('/\\{(\\d+)\\}(\\d+)\\b/', '../foo::bar{2}233{13}171{1}1{20}0.html', $matches, PREG_SET_ORDER);
如果我们忽略双重转义,它会执行以下操作;
试试这个。
$pieces = explode("}", $str);
获取所有奇数索引元素。
$pieces[1],$pieces[3],$pieces[5]
ETC...