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

PHP Regex


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

Δημοσ.

Καλησπέρα, προσπαθώ να κατανοήσω και να χρησιμοποιήσω τις κανονικές εκφράσεις. 

Αυτό που προσπαθώ να κάνω είναι: Έχω ένα κείμενο σε html, και θέλω να βρω μοτίβα για να σπάσω το κείμενο σε κομμάτια και να εμφανίσω τα 3 πρώτα. Αρχικά με την strip_tags απομακρύνω την html και έχω κείμενο και μετά με preg_split σπάω τα κομμάτια. Το θέμα μου είναι μάλλον στην κανονική έκφραση.

Να σημειώσω ότι η κανονική έκφραση αποθηκεύεται σε βάση, οπότε θεωρώ πιθανό κάποιοι ειδικοί χαρακτήρες να γίνονται escape. Το μοτίβο που έχω τώρα (και θέλω να φαίνεται και αυτό) είναι μια ημερομηνία της μορφής "η/μ:" η έκφραση που δοκιμάζα αρχικά ήταν της μορφής "/[1-31]/[1-12]:/" και τώρα "/[0-9\/:]{4,5}/". H λογική είναι σωστή; Υπάρχει κάποια βοήθεια/καθοδήγηση για αυτό που θέλω να κάνω; 

 

Ευχαριστώ πολύ!

Δημοσ.

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

Δημοσ.

Αφού τότε αποθηκεύονται στην database ρίξε μια ματιά σε αυτό 

 

http://www.techonthenet.com/sql/between.php

 

για να τα ψάχνεις με ένα query ανάλογα με τις ημερομηνίες δηλαδή κάτι σαν 

 

SELECT *
FROM your_table
WHERE your_column BETWEEN TO_DATE ('10/01:', 'd/m:')
AND TO_DATE ('11/01:', 'd/m:');

 

να σου εμφανίζει τα αποτελέσματα δηλαδή μέσα σε αυτόν τον μήνα (δεν το δοκίμασα στην πράξη αλλά κάπως έτσι είναι)

Δημοσ.

το θέμα είναι ότι δεν είναι σε στήλες αλλά μέσα σε κείμενο ενός πεδίου. (είναι άρθρα wordpress που θέλω να το εφαρμώσω στο καθένα)

Τελικά βρήκα άκρη, αυτά που δοκίμαζα δούλεψαν, μάλλον δεν έκανα καλά escape το slash. 

Ευχαριστώ πολύ.

Δημοσ.
/[1-31]/[1-12]:/

Αυτό είναι τελείως λάθος γιατί [1-31] σημαίνει "χαρακτήρας από 1 ως 3 ή το 1", δηλαδή πάλι από 1 ως 3. Αντίστοιχα το [1-12] σημαίνει από 1 ως 1 ή το 2.

/[0-9\/:]{4,5}/

Αυτό πάλι κάνει match 4 ή 5 χαρακτήρες από το σετ που δίνεις, οπότε αν μη τι άλλο δε δουλεύει τελείως σωστά για πράγματα του στυλ "12/12:" (6 χαρακτήρες, κάνει match μόνο τους πρώτους 5).

Δημοσ.
/[1-31]/[1-12]:/

Αυτό είναι τελείως λάθος γιατί [1-31] σημαίνει "χαρακτήρας από 1 ως 3 ή το 1", δηλαδή πάλι από 1 ως 3. Αντίστοιχα το [1-12] σημαίνει από 1 ως 1 ή το 2.

/[0-9\/:]{4,5}/

Αυτό πάλι κάνει match 4 ή 5 χαρακτήρες από το σετ που δίνεις, οπότε αν μη τι άλλο δε δουλεύει τελείως σωστά για πράγματα του στυλ "12/12:" (6 χαρακτήρες, κάνει match μόνο τους πρώτους 5).

 

Το πρώτο το φαντάστηκα αλλά είπα να δοκιμάσω.. Σωστά τα πάει με χαρακτήρες και όχι σαν αριθμητικές τιμές...

Το δεύτερο τελικά μου δημιούργησε και άλλο πρόβλημα γιατί μου έκανε match και άλλα πράγματα μέσα στη δομή του κειμένου. 

Τελικα χρησιμοποήησα το παρακάτω:

/([0-9]{1,2}\/[0-9]{1,2}:)/

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...