PHP:未定义的偏移量:3-预匹配
我使用示例中的URL结构: 我的正则表达式是:PHP:未定义的偏移量:3-预匹配,php,regex,url,Php,Regex,Url,我使用示例中的URL结构: 我的正则表达式是: preg_match_all("/([^\/.]+?)(?:-vs-|\.\w+$)/", $html, $matches); 预期结果: some-text-a1 sec-text-b2 third-text last-text-c1 结果我得到: some-text-a1 sec-text-b2 third-text Notice: Undefined offset: 3 in F:\xampp\htdocs\url.php on lin
preg_match_all("/([^\/.]+?)(?:-vs-|\.\w+$)/", $html, $matches);
预期结果:
some-text-a1
sec-text-b2
third-text
last-text-c1
结果我得到:
some-text-a1
sec-text-b2
third-text
Notice: Undefined offset: 3 in F:\xampp\htdocs\url.php on line 41
完整代码:
$html = "http://www.example.com/directory/some-text-a1-vs-sec-text-b2-vs-third-text-vs-last-text-c1/";
preg_match_all("/([^\/.]+?)(?:-vs-|\.\w+$)/", $html, $matches);
$prvi = "some-text-a1";
$drugi = "sec-text-b2";
$treci = "third-text";
$cetvrti = "last-text-c1";
echo "URL: ".$html."<br>";
if($prvi == $matches[1][0]){echo "1st O.K. - ".$prvi." = ".$matches[1][0]."<br>";}
if($drugi == $matches[1][1]){echo "2nd O.K. - ".$drugi." = ".$matches[1][1]."<br>";}
if($treci == $matches[1][2]){echo "3rd O.K. - ".$treci." = ".$matches[1][2]."<br>";}
if($cetvrti == $matches[1][3]){echo "4th O.K. - ".$cetvrti." = ".$matches[1][3]."<br>";}
$html=”http://www.example.com/directory/some-text-a1-vs-sec-text-b2-vs-third-text-vs-last-text-c1/";
preg_match_all(“/([^\/.]+?)(?:-vs-\.\w+$)/”,$html,$matches);
$prvi=“some-text-a1”;
$drugi=“sec-text-b2”;
$treci=“第三个文本”;
$cetvrti=“last-text-c1”;
回显“URL:.$html.”
“;
如果($prvi==$matches[1][0]){echo“1st O.K.-”$prvi.=“$matches[1][0]”。“
”;}
如果($drugi==$matches[1][1]){echo“第二个OK.-”$drugi.=“$matches[1][1]。”
“;}
如果($treci==$matches[1][2]){echo“第三个OK.-”$treci.=“$matches[1][2]。”
“;}
如果($cetvrti==$matches[1][3]){echo“4th O.K.-”$cetvrti.=“$matches[1][3]。”
”;}
我错过了什么?我想结尾的斜杠/是我的正则表达式中的问题
有什么想法吗?谢谢 这是一种不同的方法-使用parse_url和explode函数
<?php
$url = 'http://www.example.com/directory/some-text-a1-vs-sec-text-b2-vs-third-text-vs-last-text-c1/';
$parsedUrl = parse_url($url);
var_dump($parsedUrl);
$path = explode('/',trim($parsedUrl['path'],'/'));
var_dump($path);
if (is_array($path) && $path[0] === 'directory') {
if (isset($path[1])) {
$vs = explode('-vs-',$path[1]);
var_dump($vs);
}
}
这是一种不同的方法-使用parse_url和explode函数
<?php
$url = 'http://www.example.com/directory/some-text-a1-vs-sec-text-b2-vs-third-text-vs-last-text-c1/';
$parsedUrl = parse_url($url);
var_dump($parsedUrl);
$path = explode('/',trim($parsedUrl['path'],'/'));
var_dump($path);
if (is_array($path) && $path[0] === 'directory') {
if (isset($path[1])) {
$vs = explode('-vs-',$path[1]);
var_dump($vs);
}
}
试试这个
(?<=vs-)(.*?)(?=-vs)|(?<=\/)([^\/]*?)(?=-vs)|(?<=vs-)(.*?)(?=\/|$)
输出:
Array
(
[0] => some-text-a1
[1] => sec-text-b2
[2] => third-text
[3] => last-text-c1
)
试试这个
(?<=vs-)(.*?)(?=-vs)|(?<=\/)([^\/]*?)(?=-vs)|(?<=vs-)(.*?)(?=\/|$)
输出:
Array
(
[0] => some-text-a1
[1] => sec-text-b2
[2] => third-text
[3] => last-text-c1
)
使用var\u dump
查看$matches
中的实际内容。数组(2){[0]=>array(3){[0]=>string(16)“some-text-a1-vs-”[1]=>string(15)“sec-text-b2-vs-”[2]=>string(14)“third text-vs-”}[1]=>string(12)“some-text-a1”[1]=>string(11)“sec-text-b2”[2]=>string(10)“third text”}书写错误或预期错误。表达式中的\w+
应该匹配什么?它会导致URL的最后一部分完全不匹配。
匹配尾随斜杠(尽管不应转义它),然后表达式要求在行尾之前至少有一个字字符,因为行尾已经到达,所以没有字字符。是的,regex是错误的。使用var\u dump
查看$matches
中的实际内容。数组(2){[0]=>array(3){[0]=>string(16)“some-text-a1-vs-”[1]=>string(15)“sec-text-b2-vs-”[2]=>string(14)“third text-vs-”}[1]=>string(12)“some-text-a1”[1]=>string(11)“sec-text-b2”[2]=>string(10)“third text”}书写错误或预期错误。表达式中的\w+
应该匹配什么?它会导致URL的最后一部分完全不匹配。
匹配尾随斜杠(尽管不应转义它),然后表达式要求在行尾之前至少有一个字字符,因为行尾已经到达,所以没有字字符。是的,regex是错误的parse_url
还有第二个参数,用于仅获取您感兴趣的部分作为字符串。感谢您使用explode()函数的想法parse_url
还有第二个参数,用于仅获取您感兴趣的部分作为字符串。感谢您使用explode()函数的想法!