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

Ερώτηση για PHP regexp


firewalker

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

Δημοσ.

Έχουμε τον παρακάτω κώδικα.

 

>
<?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 ας βοηθήσει.

Δημοσ.

Τελικά βρήκα τι σημαίνουν.

 

Το 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.

Δημοσ.

Το ήθελα για ένα πολύ απλό 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"

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

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

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