[英]PHP: Undefined offset: 3 - preg_match_all
我有來自示例的URL結構:
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);
預期結果:
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>";}
想法我想念什么? 我想正斜杠結尾是正則表達式中的問題。
有任何想法嗎? 謝謝!
這是另一種方法-使用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-)(.*?)(?=\/|$)
說明:
(?<=…)
:正向后向樣本
( … )
:捕獲組樣本
.
:除換行符示例外的任何字符
*
:零次或多次采樣
?
:一次或一次不取樣
(?=…)
:正向超前樣本
|
:交替/ OR操作數示例
\\
:轉義特殊字符示例
[^x]
:一個不是x 樣本的字符
$
:字符串結尾或行尾,具體取決於多行模式示例
PHP:
<?php
$re = "/(?<=vs-)(.*?)(?=-vs)|(?<=\\/)([^\\/]*?)(?=-vs)|(?<=vs-)(.*?)(?=\\/|$)/"$
$str = "http://www.example.com/directory/some-text-a1-vs-sec-text-b2-vs-third-t$
preg_match_all($re, $str, $matches);
print_r($matches[0]);
輸出:
Array
(
[0] => some-text-a1
[1] => sec-text-b2
[2] => third-text
[3] => last-text-c1
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.