Я пытаюсь сопоставить 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, который я делал позже, терпел неудачу.