我有来自示例的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>";}
想法 我错过了什么?我想结尾斜杠/是我的正则表达式中的问题。
有什么想法吗?谢谢!
试试这个
(?<=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
)
这是一种
不同的方法 - 使用parse_url和分解函数。
<?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);
}
}