beef.techie Δημοσ. 21 Οκτωβρίου 2008 Δημοσ. 21 Οκτωβρίου 2008 Έχω ένα string (περιεχόμενο post από το phpbb), το οποίο είναι της μορφής: Η [b:2per89nf]ΑΕΠ ΟΛΥΜΠΙΑΣ ΚΑΕ [/b:2per89nf]είναι η μοναδική υπάρχουσα..... Τα [b:2per89nf] είναι τα bold tags από το formatting του phpbb, και το 2per89nf αλλάζει σε κάθε instance του tag... Απ' ότι κατάλαβα, μπορώ να τα αλλάξω με την εντολή preg_replace, και συγκεκριμένα: $patterns = array("[b:[^>]+]"); $replacements = array("<b>"); $fixeddesc = preg_replace($patterns, $replacements, $row[post_text]); Το pattern είναι regular expression, και ο τρόπος που φαίνεται εδώ ΔΕΝ δουλεύει (προφανώς, για όσους ξέρουν απ' αυτά τα πράγματα). Πως μπορώ να αντικαταστήσω τα tags [b:xxxxxxx] και [/b:xxxxxxx] με <b> και </b>; -----Προστέθηκε 21/10/2008 στις 01 : 53 : 27----- ΕΥΡΗΚΑ! Η απάντηση είναι $patterns = array("/[[][:]([[:alnum:]]*)[]]/", "/[[][\/][:]([[:alnum:]]*)[]]/"); Και γενικά επεξήγηση για τα regular expressions βρήκα εδώ: http://dev.mysql.com/doc/refman/5.0/en/regexp.html και εδώ: http://gr2.php.net/manual/en/pcre.examples.php
Moderators Praetorian Δημοσ. 21 Οκτωβρίου 2008 Moderators Δημοσ. 21 Οκτωβρίου 2008 Σε μένα η preg_replace δεν έπαιξε (πιθανότατα γιατί το δοκιμάζω σε dodgy μηχάνημα) αλλά αυτο που έπιασε είναι το εξής (με ereg_replace): > $testtext ="[b:asfasfasa]lalalal"; $patterns = "\[b:[^]]+\]"; $replacements = "<b>"; $fixeddesc = ereg_replace($patterns, $replacements, $testtext); echo "$testtext</b>";
beef.techie Δημοσ. 21 Οκτωβρίου 2008 Μέλος Δημοσ. 21 Οκτωβρίου 2008 Ναι, απ' ότι διάβασα (και το γράφω εδώ για να μοιραστώ τη γνώση), η διαφορά preg και ereg είναι ότι το πρώτο χρησιμοποιεί τη σύνταξη της perl για regular expressions, ενώ το δεύτερο χρησιμοποιεί τη σύνταξη της php. Παρ' όλο που η δεύτερη περίπτωση ακούγεται πιο σωστή (μιας και εξ' αρχής μιλάμε για php script), διάβασα επίσης ότι η preg είναι γενικά πιο γρήγορη, και γι' αυτό την προτίμησα τελικά... Αυτά, αρκετά μάθαμε για σήμερα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.