我有一系列网址
[
'http://www.example.com/eng-gb/products/test-1',
'http://www.example.com/eng-gb/products/test-3',
'http://www.example.com/eng-gb/about-us',
]
我需要为过滤器编写一个正则表达式,只有以:
结尾http://www.example.com/eng-gb/products/(.*)
在这种情况下,我需要排除' about-us'。
我还需要使用'http://www.example.com/eng-gb/products/(.*)'
作为正则表达式。
归档的最佳方式?
答案 0 :(得分:1)
preg_grep()
提供了较短的代码行,但由于要匹配的子字符串中似乎没有任何变量字符,因此最佳做法表明strpos()
更适合。
代码:(Demo)
$urls=[
'http://www.example.com/eng-gb/products/test-1',
'http://www.example.com/eng-gb/badproducts/test-2',
'http://www.example.com/eng-gb/products/test-3',
'http://www.example.com/eng-gb/badproducts/products/test-4',
'http://www.example.com/products/test-5',
'http://www.example.com/eng-gb/about-us',
];
var_export(preg_grep('~^http://www.example\.com/eng-gb/products/[^/]*$~',$urls));
echo "\n\n";
var_export(array_filter($urls,function($v){return strpos($v,'http://www.example.com/eng-gb/products/')===0;}));
输出:
array (
0 => 'http://www.example.com/eng-gb/products/test-1',
2 => 'http://www.example.com/eng-gb/products/test-3',
)
array (
0 => 'http://www.example.com/eng-gb/products/test-1',
2 => 'http://www.example.com/eng-gb/products/test-3',
)
一些注意事项:
使用preg_grep()
:
.com
。/products/
结尾但不是/products
的网址。这与您提问中的详细信息一致。使用strpos()
:
strpos()===0
表示必须在字符串的开头找到子字符串。答案 1 :(得分:0)
我认为你需要使用preg_grep因为你有一些网址 这将返回符合条件的网址数组
$matches = preg_grep('/products\/.*$/', $urls);
并且您也可以在php中使用validate filters来验证网址
答案 2 :(得分:0)
您需要转义正斜杠和句点才能获得http:\/\/www\.example\.com\/eng-gb\/products\/(.*)
。之后,您可以直接放置URL。
或者(更好)是搜索\/eng-gb\/products\/(.*)
。
示例:
$matches = array();
preg_match('/\/eng-gb\/products\/(.*)/', $your_url, $matches);
$product = $matches[1];