簡體   English   中英

PHP:未定義偏移量:3-preg_match_all

[英]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_urlexplode函數。

<?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM