2015-07-13 3 views
1

Лучше ли использовать preg_replace, чтобы добавлять вещи к URL-адресам? В настоящее время я пытаюсь получить Видеосервис YouTube и изменить заменить его на код ссылки [видео] [/ видео], например, с помощью preg_replace:PHP preg_replace Ссылки на YouTube

www.youtube.com/watch?v=6Zgp_G5o6Oc 

и изменить его на

[video]www.youtube.com/watch?v=6Zgp_G5o6Oc[/video] 

Так должен Я использую preg_replace() или есть лучший/более простой способ?

+0

вы можете, но почему бы не использовать parse_url/parse_str, чтобы сделать это для вас? –

+1

if '$ sptr =" www.youtube.com/watch?v=6Zgp_G5o6Oc ";' then only '$ str = '[video]'. $ Ул '[видео]';. ' – splash58

ответ

1

Предполагая, что у вас есть URL, изолированных в переменной, просто сделать это:

$taggedUrl = sprintf("[video]%s[/video]", $url); 

Или:

$taggedUrl = "[video]" . $url . "[/video]"; 

Или:

$taggedUrl = "[video]{$url}[/video]"; 

Но, если вам нужно найти URL в другом тексте, preg_replace() будет уместным:

preg_replace('/((?:https?:\/\/)?www\.youtube\.com\/watch\?v=\w+)/', '[video]\1[/video]', $inputString); 

Например:

php > $inputString = "osme regewgqg affbefqeif rgqbig www.youtube.com/watch?v=6Zgp_G5o6Oc sgwe\nhttps://www.youtube.com/watch?v=6ZrRpG_o6Oc wbqergq http://www.youtube.com/watch?v=6Zgp_G5o6Oc gegrqe"; 
php > var_dump($inputString); 
string(176) "osme regewgqg affbefqeif rgqbig www.youtube.com/watch?v=6Zgp_G5o6Oc sgwe 
https://www.youtube.com/watch?v=6ZrRpG_o6Oc wbqergq http://www.youtube.com/watch?v=6Zgp_G5o6Oc gegrqe" 

php > var_dump(preg_replace('/((?:https?:\/\/)?www\.youtube\.com\/watch\?v=\w+)/', '[video]\1[/video]', $inputString)); 
string(221) "osme regewgqg affbefqeif rgqbig [video]www.youtube.com/watch?v=6Zgp_G5o6Oc[/video] sgwe 
[video]https://www.youtube.com/watch?v=6ZrRpG_o6Oc[/video] wbqergq [video]http://www.youtube.com/watch?v=6Zgp_G5o6Oc[/video] gegrqe" 
php > 

Чтобы объяснить регулярное выражение используется:

/.../ # Marks the start and end of the expression. 
(...) # Captures the entire match as \1 
(?:...)? # ?: Makes a non-capturing group. 
     # We put it in parenthesis to group this part of the expression. 
     # The ? at the end makes the whole group optional 
     # (so that http:// or https:// is not required at all, but matched if present) 
https? # Match either 'http' or 'https'. 
\w+  # Matches one or more 'word characters' (0-9, a-z, A-Z, _) 
Смежные вопросы