1 2 3 4 5 6 | $result = mysql_query($sql); if ($result===false) { echo mysql_errno().': '.mysql_error()."\n"; echo $sql."\n"; die(); } |
1 | error_reporting(E_ALL); |
1 2 3 4 | 01 Artiestnaam -> Artiestnaam [01] Artiestnaam -> Artiestnaam (01) Artiestnaam -> Artiestnaam 01. Artiestnaam -> Artiestnaam |
1 | /[0-9]{1,2} / |
Ik snap het niet, dan wordt het dusquote:Op dinsdag 22 maart 2005 22:32 schreef Heliospan het volgende:
Ik ben een ramp in regular expressions. Ik wil de volgende waarden vervangen:
[ code verwijderd ]
Ik heb na wat tutorials de volgende briljante () regexp in elkaar:
[ code verwijderd ]
Waarmee "01 Artiestnaam" vervangen wordt in "Artiestnaam".
Maar hoe 'vertel' ik in regexp dat een teken er in mag staan? In het geval van de laatste, er MAG een punt komen na bovenstaande expressie. En bij de tweede en derde; er MAG een [ of ( en een ) of ] in staan.
Ik wil het graag in één regexp hebben ipv met str_replace, strpos en substr te kloten
1 2 3 4 | 01 Artiestnaam [01] Artiestnaam (01) Artiestnaam 01. Artiestnaam |
1 2 3 4 | (01) Foo Fighters (- All My Life) 01 doe maar (- sinds een dag of twee) 01_solar_fields_ (-_union_light) (underscores worden vervangen door een andere filter) 10. Magic Box (- Carillon) |
Misschien kom ik erg dom en vasthoudend over, maar volgens mij is er wel een patroon. Vanaf de linkerkant van de string (de eerste character):quote:Op dinsdag 22 maart 2005 22:55 schreef Swetsenegger het volgende:
Je hebt dus erg weinig houvast. een reguliere expressie herkent immers een patroon, welke er in jouw geval niet is...
1 | 01 doe maar (- sinds een dag of twee) |
Dat klopt, maar [.01.] zal blijven staanquote:Op dinsdag 22 maart 2005 23:00 schreef Heliospan het volgende:
[..]
Misschien kom ik erg dom en vasthoudend over, maar volgens mij is er wel een patroon. Vanaf de linkerkant van de string (de eerste character):
- niks, een '(', of een '['
- Getal van twee cijfers
- niks, een ')', of een ']'
- Een spatie
Hiermee wordt alles uit mijn vorige post gematched. Een artiestnaam als "Massive Attack" niet, die voldoet niet aan de eisen, een artiestnaam als "(01) Foo Fighters" wel.
Dat klopt. Alleen als een artiestnaam begint met 01 t/m 09 zou het in dat geval te filteren zijn. Er is geen bandnaam die met die tekens begint.quote:Op dinsdag 22 maart 2005 23:03 schreef Light het volgende:
Het begint al met de "rotzooi". Als je een artiest hebt waarbij de naam begint met een paar nummers dan hang je meteen al.
Dat zijn twee verschilende variabelen. Dus ja, kan ik garanderenquote:En de scheiding tussen artist en title is ook niet duidelijk, het wordt makkelijker als je daar een " - " kunt garanderen. Maar dan blijf je met het probleem zitten van die artiesten waarvan de naam begint met cijfers.
Maar je hebt soms meer dan 9 tracks op een cd. En op lyrics.com vind ik wel "16 Horsepower", die gaat dus ook mis.quote:Op dinsdag 22 maart 2005 23:06 schreef Heliospan het volgende:
[..]
Dat klopt. Alleen als een artiestnaam begint met 01 t/m 09 zou het in dat geval te filteren zijn. Er is geen bandnaam die met die tekens begint.
Ok, dat scheeltquote:[..]
Dat zijn twee verschilende variabelen. Dus ja, kan ik garanderen
1 | /[(\[\(]?[01]\d\.?[\)\]]?\s(.*)/ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php // $art = "08 Test"; WEL // $art = "[12] Test"; WEL // $art = "{01} Test"; WEL // $art = "(01) Test"; WEL // $art = "09. Test"; WEL // $art = "Massive Attack"; NIET // $art = "182 Stitches"; NIET $crap_begin = array("[", "(", "{"); $crap_eind = array("]", ")", "}"); if( in_array( substr( $art, 0, 1 ), $crap_begin ) && in_array( substr( $art, ( strpos ($art, " ") - 1 ), 1), $crap_eind) ) $art = substr( $art, ( strpos ( $art, " ") + 1 ) ); if( substr( $art, 0, 1 ) == "0" && preg_match( "/[0-9]/", substr( $art, 1, 1 ) ) ) $art = substr( $art, 2 ); if( substr( $art, 0, 1 ) == "." ) $art = substr( $art, 1 ); $art = trim($art); ?> |
Dan ben ik toch benieuwd wat je eraan hebt aangepastquote:Op dinsdag 22 maart 2005 23:32 schreef Heliospan het volgende:
Lijkt met een kleine wijziging goed te werken! Bedankt!
1 | $clean = preg_replace('#^\s*[({[]?[01]?[0-9]?[)}\x5d.]?(?!\d)\s*#', '', $dirty); |
1 2 3 4 5 6 7 8 9 10 | # ^ begin string \s* 0 of meer spaties of tabs [({[]? 0 of 1 keer een (, { of [ [01]? 0 of 1 keer een 0 of 1 [0-9]? 0 of 1 keer een cijfer [)}\x5d.]? 0 of 1 keer een ), }, ] of . (?!\d) niet gevolgd door een cijfer \s* 0 of meer spaties of tabs # |
Zonder extra informatie over bestaande titels kan je die nooit onderscheiden van "16 Foo Fighters". Kan je niet beter zoeken in http://www.freedb.org?quote:Op woensdag 23 maart 2005 01:28 schreef Heliospan het volgende:
SuperRembo, ook bedankt! Deze werkt ook goed, behalve weer bij 16 Horsepower. Ik zal proberen een goede tussenweg te vinden
Dus 2pac wordt ook pac. Lijkt me niet de bedoeling eigenlijk.quote:Op dinsdag 22 maart 2005 23:55 schreef SuperRembo het volgende:
Deze werkt goed op de test-set:
[ code verwijderd ]
[ code verwijderd ]
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |