停止正则表达式将匹配的URL与preg_split分开

时间:2013-12-13 10:09:01

标签: php regex preg-split

给出以下代码:

$regex = '/(http\:\/\/|https\:\/\/)([a-z0-9-\.\/\?\=\+_]*)/i';
$text = preg_split($regex, $note, -1, PREG_SPLIT_DELIM_CAPTURE);

返回一个数组,如:

array (size=4)
  0 => string '...' (length=X)
  1 => string 'https://' (length=8)
  2 => string 'duckduckgo.com/?q=how+much+wood+could+a+wood-chuck+chuck+if+a+wood-chuck+could+chuck+wood' (length=89)
  3 => string '...' (length=X)

如果返回的数组的size = 3,只有一个URL,我更喜欢它。这可能吗?

1 个答案:

答案 0 :(得分:3)

确保可以完成,只需从正则表达式中删除那些额外匹配的组。请尝试以下代码:

$regex = '#(https?://[a-z0-9.?=+_-]*)#i';
$text = preg_split($regex, $note, -1, PREG_SPLIT_DELIM_CAPTURE);

现在生成的数组将在数组中有3个元素而不是4个。

除了删除额外的分组外,我还简化了你的正则表达式,因为大多数特殊字符不需要在字符类中进行转义。