PHP RegEx не получит знак вопроса

Я пытаюсь сопоставить URL-адреса в строке, используя функцию PHP «preg_match_all». Он отлично работает, за исключением того, что он не будет соответствовать URL-адресам с вопросительными знаками.

Например, это будет соответствовать штрафу:

http://espn.com/mlb 

Но это не будет соответствовать:

 http://espn.com/mlb?player=71 

Вот регулярное выражение, которое я использую,

 $regexUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 

Я не могу понять, почему знак вопроса не подхвачен \ S. Я пробовал много разных выражений и не могу получить знак вопроса для соответствия. Есть идеи?

РЕДАКТИРОВАТЬ:

Оказывается, preg_match_all возвращал true, но я не избежал вопросительного знака на выходе preg_match_all, поэтому вызов preg_replace, который я делал позже, терпел неудачу.