Preg_Replace vraag
Wie kan me op weg helpen met de volgende puzzel.
In een string komt op een willekeurige plek voor:
http://<b>open.spotify.com/track</b>/0XtTi4W87cAtK86sm6JbZI
"http://<b>open.spotify.com/track</b>/" is fixed, de serie letters en cijfers varieert (aantal 22 is constant)
Ik wil dit vervangen door bijvoorbeeld het woord PLAY. Wie kan mij een de juiste preg_replace helpen?
In een string komt op een willekeurige plek voor:
http://<b>open.spotify.com/track</b>/0XtTi4W87cAtK86sm6JbZI
"http://<b>open.spotify.com/track</b>/" is fixed, de serie letters en cijfers varieert (aantal 22 is constant)
Ik wil dit vervangen door bijvoorbeeld het woord PLAY. Wie kan mij een de juiste preg_replace helpen?
zo-iets?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$myString = 'http://<b>open.spotify.com/track</b>/0XtTi4W87cAtK86sm6JbZI';
$newString = substr($myString, 0, -22) . 'PLAY';
echo htmlentities($newString);
?>
$myString = 'http://<b>open.spotify.com/track</b>/0XtTi4W87cAtK86sm6JbZI';
$newString = substr($myString, 0, -22) . 'PLAY';
echo htmlentities($newString);
?>
Gewijzigd op 11/01/2011 10:20:31 door Kris Peeters
Geweldig bedankt! substr -22 Achteraf is het soms zo simpel!
Toevoeging op 11/01/2011 10:33:49:
Oeps. Iets te snel enthousiast. De laatste 22 karakters variëren. Een andere variant bijvoorbeeld http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK gaat dit script dus niet vinden.
Toevoeging op 11/01/2011 10:33:49:
Oeps. Iets te snel enthousiast. De laatste 22 karakters variëren. Een andere variant bijvoorbeeld http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK gaat dit script dus niet vinden.
Die laatste / staat er altijd, he?
Eventueel dan zo-iets
Ik ben nooit een grote preg held geweest.
EDIT:
Of nog simpeler
Eventueel dan zo-iets
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$myString = 'http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK';
$newString = zoek_zelf_een_betere_naam ($myString) .'PLAY';
echo htmlentities($newString);
function zoek_zelf_een_betere_naam ($string) {
$split = explode("/", $string);
$return = "";
for($i=0; $i< (count($split) - 1); $i++) {
$return .= $split[$i] . "/";
}
return $return;
}
?>
$myString = 'http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK';
$newString = zoek_zelf_een_betere_naam ($myString) .'PLAY';
echo htmlentities($newString);
function zoek_zelf_een_betere_naam ($string) {
$split = explode("/", $string);
$return = "";
for($i=0; $i< (count($split) - 1); $i++) {
$return .= $split[$i] . "/";
}
return $return;
}
?>
Ik ben nooit een grote preg held geweest.
EDIT:
Of nog simpeler
Gewijzigd op 11/01/2011 10:59:07 door Kris Peeters
Mooi Kris, maar één ding snap ik niet. $mystring = nu gevuld met 'http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK' Dat is echter steeds anders als onderdeel van een veel grotere string. Hoe vind ik in de totale string dat stukje waar http://<b>open.spotify.com/track</b>/ staat +22 willekeurige karakters?
Opzich is dit geen moeilijke pattern.
Eerst zoek je op dit stuk: http://<b>open.spotify.com/track</b>/
Hierbij moet je een aantal karakters strippen. Als je niet weet welke, kan de functie preg_quote(); je ook helpen:
Dit zou eruit komen: http://\<b\>open\.spotify\.com/track\</b\>/
Daarna moet je de willekeurige reeks van 22 letters & cijfers zoeken. Dit is een simpele pattern: [a-zA-Z0-9]{22}
Nu samenvoegen:
http://\<b\>open\.spotify\.com/track\</b\>/[a-zA-Z0-9]{22}
Nu krijgen we:
Dit is eigenlijk een hele simpele reguliere expressie. Lees deze tutorial eens ;)
Je zult versteld staan van de kracht achter de RegEx!
Eerst zoek je op dit stuk: http://<b>open.spotify.com/track</b>/
Hierbij moet je een aantal karakters strippen. Als je niet weet welke, kan de functie preg_quote(); je ook helpen:
Dit zou eruit komen: http://\<b\>open\.spotify\.com/track\</b\>/
Daarna moet je de willekeurige reeks van 22 letters & cijfers zoeken. Dit is een simpele pattern: [a-zA-Z0-9]{22}
Nu samenvoegen:
http://\<b\>open\.spotify\.com/track\</b\>/[a-zA-Z0-9]{22}
Nu krijgen we:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$string = 'De tekst waar alles in staat. http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK. Kijk zelf maar';
$pattern = '#http://\<b\>open\.spotify\.com/track\</b\>/[a-zA-Z0-9]{22}#';
$string = preg_replace($pattern, 'PLAY', $string);
?>
$string = 'De tekst waar alles in staat. http://<b>open.spotify.com/track</b>/BXtCi4W87cAtK86sm6JbZK. Kijk zelf maar';
$pattern = '#http://\<b\>open\.spotify\.com/track\</b\>/[a-zA-Z0-9]{22}#';
$string = preg_replace($pattern, 'PLAY', $string);
?>
Dit is eigenlijk een hele simpele reguliere expressie. Lees deze tutorial eens ;)
Je zult versteld staan van de kracht achter de RegEx!
Edit:
Typo
Gewijzigd op 11/01/2011 17:51:52 door Mark L
Bedankt Mark. Deze does this trick. Ik ga de tutorial doornemen.
Kreeg ik het net door, loop ik toch nog vast. Hoe beschrijf ik het pattern voor http://<b>open.spotify.com/user/</b>yesmore/playlist/4GMb0B6ZzeUjVXAomPoY06 als ik dit door PLAY wil vervangen?
de waarde"yesmore" en "4GMb0B6ZzeUjVXAomPoY06" varieen in dit geval. yesmore is de username van de maker van een playlist deze naam kan spaties,underscores etc bevatten.
de waarde"yesmore" en "4GMb0B6ZzeUjVXAomPoY06" varieen in dit geval. yesmore is de username van de maker van een playlist deze naam kan spaties,underscores etc bevatten.
Heb je anders een lijst van alle mogelijke patronen die zich kunnen voordoen?
Kris dit is het laatste patroon wat ik nodig heb. Ik heb er een voor tracks en een voor albums. Die werken prima. Ik krijg alleen de versie met playlists niet werkend omdat ook de username tussen zit, yesmore in dit voorbeeld.




