之间的空间让我们说我有一个这样的字符串:提取URL没有
$urlsString = "http://foo.com/barhttps://bar.com//foo.com/foo/bar"
,我想这样的一个数组:
array(
[0] => "http://foo.com/bar",
[1] => "https://bar.com",
[0] => "//foo.com/foo/bar"
);
我期待像:
preg_split("~((https?:)?//)~", $urlsString, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
哪里PREG_SPLIT_DELIM_CAPTURE定义是:
如果设置了此标志,则分隔符模式中的括号表达式也将被捕获并返回。
这就是说,上述preg_split
回报:
array (size=3)
0 => string '' (length=0)
1 => string 'foo.com/bar' (length=11)
2 => string 'bar.com//foo.com/foo/bar' (length=24)
的我在做什么错误或任何其他的想法任何想法? PS:我在使用this regex,直到我意识到它不包含这种情况。
编辑:
由于@sidyll指出,我的思念在preg_split
参数$limit
。无论如何,我的正则表达式有问题,所以我会使用@WiktorStribiżew建议。
'preg_split'有四个参数,第三个是限制。你通过限制标志。标志是第四个参数。但是,这不会产生你所期望的。DELIM_CAPTURE将分隔符分隔为自己的元素,并且您的正则表达式会导致分隔符(与http://和//(与两个分隔符相同)的匹配模糊) – sidyll
哦!你是对的。谢谢 – Manolo