Predatorkill Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 (επεξεργασμένο) Καλημερα παιδες, μπορει καποιος να βοηθησει με αυτο το regex? https://regexr.com/5djah Αυτο που θελω ειναι να μην επιστρεφει το " : ", δλδ να επιστρεφει μονο το "nZH8V78rjshf3pXfmiQgjrCmNdO2" Επεξ/σία 8 Οκτωβρίου 2020 από Predatorkill
Papakaliati Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 (επεξεργασμένο) (?<=:)[A-Za-z0-9._]* Χμ, άκυρο, μονο σε chrome είναι μέσα το positive look behind. PS: και τον δημιουργό του regex να είχα να μου ψηθηριζει γλυκά στο αυτί, πάλι δεν ξέρω αμα θα το έκανα σωστά. Και αρνούμαι μα το μάθω, γιατί δεν το χρήσιμοποιω και τόσο συχνά. Επεξ/σία 8 Οκτωβρίου 2020 από Papakaliati 1 1
pmav99 Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 (επεξεργασμένο) Υπάρχει λόγος που δεν κάνεις απλά ένα split στο `:`; Είναι valid character για το `nZH8V78rjshf3pXfmiQgjrCmNdO2`; Επεξ/σία 8 Οκτωβρίου 2020 από pmav99
Predatorkill Δημοσ. 8 Οκτωβρίου 2020 Μέλος Δημοσ. 8 Οκτωβρίου 2020 (επεξεργασμένο) 3 ώρες πριν, Papakaliati είπε Χμ, άκυρο, μονο σε chrome είναι μέσα το positive look behind. Δεν θα τρεξει σε browser οποτε ειμαστε οκ. @Papakaliati παπαλα, δεν παιζει, ριχνει σφαλμα η react native: /(?<=:)[A-Za-z0-9._]*/ [SyntaxError: Invalid regular expression: invalid group specifier name] @pmav99 δεν ξερω τι ειναι πιο γρηγορο, το split ή το regex? Θα τρεξει σε .map σε array με μαξιμουμ ~500 στοιχεια Επεξ/σία 8 Οκτωβρίου 2020 από Predatorkill
k33theod Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 Για να πάρεις κομμάτι πρέπει αυτό που θες να το βάλεις σε παρένθεση. Τότε δημιουργείται ένα group που έχει μέσα αυτό που θες. Δηλαδή :([A-Za-z0-9._]*) Με πια γλώσσα προγραμματισμού το χρησιμοποιείς; τώρα είδα ότι έχεις react. Με απλή js όπως στην εικόνα 1
marios28 Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 (επεξεργασμένο) Είτε αυτό που σου γράφει ο @k33theod (για τη γλώσσα που χρησιμοποιείς) Ή διαφορετικά χρησιμοποιείς string[] s = regex.Split(line), αν ο χαρακτήρας ":" δεν είναι έγκυρος στο "nZH8V78rjshf3pXfmiQgjrCmNdO2". Αν είναι έγκυρος δοκίμασε να γράψεις string[] s = regex.Split(line, 2), ώστε ο διαχωρισμός να γίνει μόνο στον πρώτο χαρακτήρα ":" .... Στη δεύτερη θέση (αν υπάρχει) του s θα πάρεις αυτό που θες. Επεξ/σία 8 Οκτωβρίου 2020 από marios28 1
pmav99 Δημοσ. 8 Οκτωβρίου 2020 Δημοσ. 8 Οκτωβρίου 2020 7 hours ago, Predatorkill said: @pmav99 δεν ξερω τι ειναι πιο γρηγορο, το split ή το regex? Θα τρεξει σε .map σε array με μαξιμουμ ~500 στοιχεια Τα performance characteristics τηςJavascript ομολογώ ότι δεν είναι το δυνατό μου σημείο αλλά εικάζω ότι το split() θα είναι πιο γρήγορο. Το regex είναι πολύ πολύ πιο περίπλοκο από πλευράς implementation και είναι εν γένει αργά. Τώρα αν κάνει κανένα μαγικό το JIT, δεν ξέρω. Σκέψου πχ, ότι χρειάστηκε να ρωτήσεις στο forum, κτλ, ενώ με string manipulation θα είχες τελειώσει σε 30''. Άσε που αν έχεις περίπλοκο regex και χρειαστεί στο μέλλον να κάνεις αλλαγές τον ήπιες. Πάλι θα φας άλλο τόσο για να ψάχνεις τι και πως. IMHV τα regex είναι χρήσιμο εργαλείο αλλά τα χρησιμοποιείς όταν δεν μπορείς να κάνεις αλλιώς. Αν η δουλειά σου γίνεται με απλό string manipulation τότε γιατί να μπλέκεις; Αν δεν βαριέσαι κάνε profiling και πόσταρε τα αποτελέσματα, έχει ένα ενδιαφέρον. For the record σε python είναι κοντά 4 φορές πιο γρήγορο το string manipulation: In [20]: %timeit pat.search(text).group() 527 ns ± 3.02 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [21]: %timeit text.split(":")[-1] 145 ns ± 2.68 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) In [22]: %timeit text.partition(":")[-1] 130 ns ± 0.589 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) 1
k33theod Δημοσ. 9 Οκτωβρίου 2020 Δημοσ. 9 Οκτωβρίου 2020 (επεξεργασμένο) Στις 8/10/2020 στις 11:46 ΠΜ, Papakaliati είπε PS: και τον δημιουργό του regex να είχα να μου ψηθηριζει γλυκά στο αυτί, πάλι δεν ξέρω αμα θα το έκανα σωστά. Και αρνούμαι μα το μάθω, γιατί δεν το χρήσιμοποιω και τόσο συχνά. Εννοείς δεν θες να μάθεις τα lookaround ή τα regex γενικά. Γιατί γενικά "πρέπει" να το μάθεις ή τουλάχιστον να καταννοήσεις πως δουλεύει. Είναι το απόλυτο tool για string και το βρίσκεις πάντα μπροστά σου. 17 ώρες πριν, pmav99 είπε IMHV τα regex είναι χρήσιμο εργαλείο αλλά τα χρησιμοποιείς όταν δεν μπορείς να κάνεις αλλιώς. Αν η δουλειά σου γίνεται με απλό string manipulation τότε γιατί να μπλέκεις; Η δουλεία γίνεται πάντα και με strings απλά στο τέλος θα ξαναανακαλύψεις τα patterns και τα regexes O χρόνος και κόπος που χρειάζεται για να αναπτύξεις ένα πρόγραμμα που θα ψάχνει ένα pattern (px έγγυρο url ή εμαιλ ) είναι πολύς και έχεις 99% πιθανότητες να κάνεις λάθος. Το regex σου δίνει τη λύση σε μισή γραμμή πολύπλοκων κινέζικων https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*) κινέζικα μεν μισή γραμμή δε. Επεξ/σία 9 Οκτωβρίου 2020 από k33theod
Papakaliati Δημοσ. 9 Οκτωβρίου 2020 Δημοσ. 9 Οκτωβρίου 2020 (επεξεργασμένο) 42 λεπτά πριν, k33theod είπε Εννοείς δεν θες να μάθεις τα lookaround ή τα regex γενικά. Γιατί γενικά "πρέπει" να το μάθεις ή τουλάχιστον να καταννοήσεις πως δουλεύει. Είναι το απόλυτο tool για string και το βρίσκεις πάντα μπροστά σου. Η δουλεία γίνεται πάντα και με strings απλά στο τέλος θα ξαναανακαλύψεις τα patterns και τα regexes O χρόνος και κόπος που χρειάζεται για να αναπτύξεις ένα πρόγραμμα που θα ψάχνει ένα pattern (px έγγυρο url ή εμαιλ ) είναι πολύς και έχεις 99% πιθανότητες να κάνεις λάθος. Το regex σου δίνει τη λύση σε μισή γραμμή πολύπλοκων κινέζικων https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*) κινέζικα μεν μισή γραμμή δε. Τα ρεγκεξ. Όταν πρέπει μα το χρησιμοποιήσω κάθομαι το βγάζω, αλλά το 98% των περιπτώσεων, λύνεται με string manipulation όπως είπες, το άλλο 1%, είναι περιπτώσεις που τις βρίσκεις έτοιμες (is email, is website etc), και το άλλο 1% που χρειάζεσαι Regex, το βγάζω με ότι θυμάμαι και λίγο googling. Αμα ποτέ χρειαστεί να το χρησιμοποιήσω σε project extensively, και δεν υπάρχει άλλη λύση, τότε θα κάτω μα το μάθω Για το συγκεκριμένο παράδειγμα, σίγουρα δεν υπήρχε περίπτωση να απευθυνθώ σε regex για την λύση. Επεξ/σία 9 Οκτωβρίου 2020 από Papakaliati
Sacadmerde Δημοσ. 9 Οκτωβρίου 2020 Δημοσ. 9 Οκτωβρίου 2020 16 λεπτά πριν, Papakaliati είπε το βγάζω με ότι θυμάμαι και λίγο googling. Αμα ποτέ χρειαστεί να το χρησιμοποιήσω σε project extensively, και δεν υπάρχει άλλη λύση, τότε θα κάτω μα το μάθω Επειδή και εγώ είμαι σε αυτή τη φάση, αλλά θα με έψηνε να δω λίγο καλύτερα κανένα σωστό explanation (και με βάση στις regular expressions ως μαθηματικό concept), έχει κανείς καμία καλή πηγή; Κατά προτίμηση video και όχι μόνο text.
pmav99 Δημοσ. 9 Οκτωβρίου 2020 Δημοσ. 9 Οκτωβρίου 2020 2 hours ago, k33theod said: Είναι το απόλυτο tool για string και το βρίσκεις πάντα μπροστά σου. https://xkcd.com/208/ https://xkcd.com/1171/ https://xkcd.com/1313/ 2 hours ago, k33theod said: O χρόνος και κόπος που χρειάζεται για να αναπτύξεις ένα πρόγραμμα που θα ψάχνει ένα pattern (px έγγυρο url ή εμαιλ ) είναι πολύς και έχεις 99% πιθανότητες να κάνεις λάθος. Το regex σου δίνει τη λύση σε μισή γραμμή πολύπλοκων κινέζικων https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*) κινέζικα μεν μισή γραμμή δε. Εγώ πάλι θα έλεγα ότι οι πιθανότητες να γράψει μόνος του ο μέσος προγραμματιστής ένα περίπλοκο regex και να κάνει λάθος είναι 100%. Άρα το 99% που αναφέρεις είναι ένα εξαιρετικό improvement For the record, το regex που κάνει parse σχεδόν "σωστά" το email σύμφωνα με το RFC πρότυπο είναι αυτό (source) (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
k33theod Δημοσ. 9 Οκτωβρίου 2020 Δημοσ. 9 Οκτωβρίου 2020 3 λεπτά πριν, pmav99 είπε https://xkcd.com/208/ https://xkcd.com/1171/ https://xkcd.com/1313/ Εγώ πάλι θα έλεγα ότι οι πιθανότητες να γράψει μόνος του ο μέσος προγραμματιστής ένα περίπλοκο regex και να κάνει λάθος είναι 100%. Άρα το 99% που αναφέρεις είναι ένα εξαιρετικό improvement For the record, το regex που κάνει parse σχεδόν "σωστά" το email σύμφωνα με το RFC πρότυπο είναι αυτό (source) (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) Έχει hex codes γιαυτό είναι τόοοσσσσοοο αλιώς θα ήταν μισή γραμμή. 😄 Νομίζω με λίγες ώρες μελέτη για την κατανόηση των βασικών εννοιών (special characters, character classes, shorthands, dots, anchors, grouping, backreferences) καλύπτουν τις βασικές ανάγκες. Όταν μετά χρειάστείς κάτι special πας στις πηγές που έχεις και το βρίσκεις. Το θέμα είναι να μην το πάρεις στραβά και με φόβο😱
t(o.ot) Δημοσ. 28 Οκτωβρίου 2020 Δημοσ. 28 Οκτωβρίου 2020 (επεξεργασμένο) Η πιο απλή regex που μπορώ να σκεφτώ είναι αυτή: /([^:]*)$/ αλλά μου μυρίζει κι εμένα XY problem Στις 8/10/2020 στις 1:27 ΜΜ, Predatorkill είπε @pmav99 δεν ξερω τι ειναι πιο γρηγορο, το split ή το regex? Θα τρεξει σε .map σε array με μαξιμουμ ~500 στοιχεια Αν η αμφιβολία είναι στο performance πήγαινε για split όπως ειπώθηκε εκτός αν έχεις ήδη πρόβλημα με την ταχύτητα και έχεις κάνει όλα τα αλλά σημαντικά βήματα για να βελτιώσεις την κατάσταση (db optimisation, caching, rendering etc). Μιλάς για διαφορά <1-2ms. Επεξ/σία 28 Οκτωβρίου 2020 από t(o.ot) 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα