firewalker Δημοσ. 15 Αυγούστου 2010 Δημοσ. 15 Αυγούστου 2010 Έχουμε τον παρακάτω κώδικα. > <?php $string = file_get_contents($argv[1]); $string = preg_replace('/\x0d(.*)?\x0d(.*)\x0d/U', '\\2', $string); $string = preg_replace(array('/\x03\d{1,2},\d{1,2}/', '/\x03\d{1,2}/', '/[\x00-\x09]|[\x0b-\x1f]/'), '', $string); echo($string); ?> Στο '/\x0d(.*)?\x0d(.*)\x0d/U' ψάχνει να κάνει match cr αλλά τι ακριβώς; Η εντολή /U τι κάνει; To \\2; Το array('/\x03\d{1,2},\d{1,2}/', '/\x03\d{1,2}/', '/[\x00-\x09]|[\x0b-\x1f]/') κάνει κάτι match και το αλλάζει με "; Τι κάνει match όμως; Όποιος γνωρίζει από php preg ας βοηθήσει.
firewalker Δημοσ. 16 Αυγούστου 2010 Μέλος Δημοσ. 16 Αυγούστου 2010 Τελικά βρήκα τι σημαίνουν. Το preg_replace('/\x0d(.*)?\x0d(.*)\x0d/U', '\\2', $string); Αφαιρεί όλα τα cr (carriage return). Στην πραγματικότητα εντοπίζει λέξεις μέσα σε cr και κρατά την δεύτερη εμφάνιση λέξης. Το $string = preg_replace(array('/\x03\d{1,2},\d{1,2}/', '/\x03\d{1,2}/', '/[\x00-\x09]|[\x0b-\x1f]/'), '', $string); Αφαιρεί μονοψήφιους ή διψήφιους αριθμούς που χωρίζονται από υποδιαστολή (,) και μονοψήφιους ή διψήφιους αριθμούς όταν βρίσκονται μετά τον χαρακτήρα EXT (End of teXT). Αφαιρεί και κάθε ASCII χαρακτήρα από 00 έως 09 και 11 έως 31.
firewalker Δημοσ. 16 Αυγούστου 2010 Μέλος Δημοσ. 16 Αυγούστου 2010 Το ήθελα για ένα πολύ απλό parser για log files του kvirc. Τελικά το έκανα με λίγο διαφορετικό τρόπο. sed -e "s/\r//" -e "s/\!nc\|\!n\|\!h\|\!c//g" -e "s/\x03[0-9]\{1,2\},[0-9]\{1,2\}//g" -e "s/\x03[0-9]\{1,2\}//g" -e "s/[\x01-\x09]\|[\x0b-\x0f]//g"
gtroza Δημοσ. 16 Αυγούστου 2010 Δημοσ. 16 Αυγούστου 2010 και πάλι bravo δραστήριε firewalker ευχαριστούμε ! .
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.