Προς το περιεχόμενο

Regular Expressions στην PHP


beef.techie

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα 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
Δημοσ.

Σε μένα η preg_replace δεν έπαιξε (πιθανότατα γιατί το δοκιμάζω σε dodgy μηχάνημα) αλλά αυτο που έπιασε είναι το εξής (με ereg_replace):

 

>
$testtext ="[b:asfasfasa]lalalal";
$patterns = "\[b:[^]]+\]";
$replacements = "<b>";
$fixeddesc = ereg_replace($patterns, $replacements, $testtext);
echo "$testtext</b>";

Δημοσ.

Ναι, απ' ότι διάβασα (και το γράφω εδώ για να μοιραστώ τη γνώση), η διαφορά preg και ereg είναι ότι το πρώτο χρησιμοποιεί τη σύνταξη της perl για regular expressions, ενώ το δεύτερο χρησιμοποιεί τη σύνταξη της php.

 

Παρ' όλο που η δεύτερη περίπτωση ακούγεται πιο σωστή (μιας και εξ' αρχής μιλάμε για php script), διάβασα επίσης ότι η preg είναι γενικά πιο γρήγορη, και γι' αυτό την προτίμησα τελικά...

 

Αυτά, αρκετά μάθαμε για σήμερα :-D

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...