preg replace bij youtube link

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul Weiss

Paul Weiss

17/01/2024 17:49:31
Quote Anchor link
Hallo iedereen. Ik krijg het niet voor elkaar om bij onderstaande voorbeeld het gedeelte t/m het = teken te verwijderen. Ik zou dus het gedeelte na het = teken dus S7DhdmDkRZo moeten overhouden.

Ik heb onderstaande code, maar dat werkt niet.Heeft iemand met kennis van de preg replace functie een idee?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php


$str
= 'https://www.youtube.com/watch?v=S7DhdmDkRZo';

$pattern = 'https://www.youtube.com/watch?v=';
$result = preg_replace($pattern, '', $str);

echo $result;


?>
Gewijzigd op 17/01/2024 17:51:28 door Paul Weiss
 
PHP hulp

PHP hulp

03/12/2024 18:30:53
 
Adoptive Solution

Adoptive Solution

17/01/2024 20:36:45
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$str
= 'https://www.youtube.com/watch?v=S7DhdmDkRZo';

$arr = explode('=', $str);
echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';

echo $arr[1];
?>
 
Rob Doemaarwat

Rob Doemaarwat

17/01/2024 22:10:32
Quote Anchor link
Hiervoor heb je geen preg_replace nodig, maar gewoon str_replace
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$str
= 'https://www.youtube.com/watch?v=S7DhdmDkRZo';

$pattern = 'https://www.youtube.com/watch?v=';
$result = str_replace($pattern, '', $str);

echo $result;


?>


Wat je met een preg_replace wel kunt doen is voorschrijven dat $pattern ook alleen maar aan het begin van de $str mag staan (maar de kans dat $pattern willekeurig nog eens ergens voorkomt in een YT URL lijkt me vrij klein):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$str
= 'https://www.youtube.com/watch?v=S7DhdmDkRZo';

$pattern = 'https://www.youtube.com/watch?v=';
$result = preg_replace('/^' . preg_quote($pattern,'/') . '/i', '', $str);

echo $result;

?>


Uitleg:
- Een regular expression begint en eindigt altijd met een delimiter. Meestal is dit de slash (in PHP kan het van alles zijn, maar andere talen zoals JavaScript gebruiken alleen de slash).
- ^ betekent "moet aan het begin van de $str staan"
- preg_replace escapet speciale karakters (die een specifieke functie in een regular expression hebben, zoals de slash). Je had ook kunnen schrijven (zelf escapen; dubbele backslash, omdat je de backslash in een string ook moet escapen)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
preg_replace('/^https?:\\/\\/www\\.youtube\\.com\\/watch\\?v=/i', '', $str);

- De "i" na de sluitende slash maakt de match case insensitive (als dit gebruikers input is kan een gebruiker natuurlijk ook YouTube.com schrijven). Je kunt natuurlijk ook str_ireplace gebruiken.
- Het vraagteken na "https" in het voorbeeld bij punt 3 zorgt ervoor dat zowel http:// als https:// werken (de "s" is optioneel dmv het vraagteken). Ook hier weer: als dit user input is maak je het wat robuuster.

Overigens: als je op zoek bent naar de YouTube code, kun je het ook andersom aanpakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

if(preg_match('/v=(\\w+)/', $str, $match)) die($match[1]);

?>


Dit zoekt in de $str naar een stukje tekst dat begint met "v=" en dan wordt gevolg door een aantal alfanumerieke karakters (dus alles totdat er een niet alfanumeriek karakter voorbij komt, of het einde van de string). Dit is het \\w+ deel. Omdat er haakjes omheen staan is specifiek deze waarde later terug te vinden in $match[1] (in $match[0] staat de complete match, dus inclusief "v=").

Als de code (bijvoorbeeld) een lengte heeft van 8 tot 12 karakters kun je ook nog dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

if(preg_match('/v=(\\w{8,12})\\b/', $str, $match)) die($match[1]);

?>


Lijkt me duidelijk waar die 8,12 zijn gebleven. De \\b erachter zorgt ervoor dat er dan ook een overgang tussen de alfanumerieke karakters en "wat anders" (witruimte, punt, komma, enz) zit (niet dat je max 12 karakter terugkrijgt, terwijl het er eigenlijk 13 waren; op deze manier heb je dan gewoon geen match).
Gewijzigd op 17/01/2024 22:14:37 door Rob Doemaarwat
 
- Ariën  -
Beheerder

- Ariën -

18/01/2024 15:00:41
Quote Anchor link
Een handige site om de reguliere expressies te begrijpen is RegExper.

https://regexper.com/#v%3D%28%5C%5Cw%2B%29
Gewijzigd op 18/01/2024 15:01:22 door - Ariën -
 
Ward van der Put
Moderator

Ward van der Put

19/01/2024 09:41:32
Quote Anchor link
Voor URL's kun je de URL-parser van PHP gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

declare(strict_types=1);

$str = 'https://www.youtube.com/watch?v=S7DhdmDkRZo';
$video = parse_url($str, PHP_URL_QUERY);

//> string(13) "v=S7DhdmDkRZo"
var_dump($video);

?>
 
Paul Weiss

Paul Weiss

19/01/2024 11:54:12
Quote Anchor link
Hartelijk dank iedereen voor jullie bijdragen. Ik vind de preg replace functie best wel complex als ik het zo mag zeggen. Maar ik ben door jullie in ieder geval geholpen.
 

24/01/2024 13:34:28
Quote Anchor link
Volgens SO is deze regex RFC 5322 compliant:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


Je kunt ook de W3C HTML5 specificatie gebruiken, die is wat korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
Gewijzigd op 24/01/2024 13:37:36 door
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.