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

Βοηθεια με ενα regex


Predatorkill

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

Δημοσ. (επεξεργασμένο)

Καλημερα παιδες, μπορει καποιος να βοηθησει με αυτο το regex? https://regexr.com/5djah

Αυτο που θελω ειναι να μην επιστρεφει το " : ", δλδ να επιστρεφει μονο το "nZH8V78rjshf3pXfmiQgjrCmNdO2"

Επεξ/σία από Predatorkill
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

(?<=:)[A-Za-z0-9._]*

Χμ, άκυρο, μονο σε chrome είναι μέσα το positive look behind.

PS: και τον δημιουργό του regex να είχα να μου ψηθηριζει γλυκά στο αυτί, πάλι δεν ξέρω αμα θα το έκανα σωστά. Και αρνούμαι μα το μάθω, γιατί δεν το χρήσιμοποιω και τόσο συχνά.

Επεξ/σία από Papakaliati
  • Like 1
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
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 στοιχεια

Επεξ/σία από Predatorkill
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για να πάρεις κομμάτι πρέπει αυτό που θες να το βάλεις σε παρένθεση. Τότε δημιουργείται ένα group που έχει μέσα αυτό που θες. Δηλαδή  :([A-Za-z0-9._]*) Με πια γλώσσα προγραμματισμού το χρησιμοποιείς;

τώρα είδα ότι έχεις react. Με απλή js όπως στην εικόνα

 

Untitled.png

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Είτε αυτό που σου γράφει ο @k33theod (για τη γλώσσα που χρησιμοποιείς)

Ή διαφορετικά χρησιμοποιείς string[] s = regex.Split(line), αν ο χαρακτήρας ":" δεν είναι έγκυρος στο "nZH8V78rjshf3pXfmiQgjrCmNdO2". Αν είναι έγκυρος δοκίμασε να γράψεις string[] s = regex.Split(line, 2), ώστε ο διαχωρισμός να γίνει μόνο στον πρώτο χαρακτήρα ":" .... Στη δεύτερη θέση (αν υπάρχει) του s θα πάρεις αυτό που θες. 

 

Επεξ/σία από marios28
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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)

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
Στις 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()@:%_\+.~#?&//=]*)

 κινέζικα μεν μισή γραμμή δε. 

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
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 για την λύση.

Επεξ/σία από Papakaliati
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

16 λεπτά πριν, Papakaliati είπε

το βγάζω με ότι θυμάμαι και λίγο googling. Αμα ποτέ χρειαστεί να το χρησιμοποιήσω σε project extensively, και δεν υπάρχει άλλη λύση, τότε θα κάτω μα το μάθω

Επειδή και εγώ είμαι σε αυτή τη φάση, αλλά θα με έψηνε να δω λίγο καλύτερα κανένα σωστό explanation (και με βάση στις regular expressions ως μαθηματικό concept), έχει κανείς καμία καλή πηγή;

Κατά προτίμηση video και όχι μόνο text. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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 :P

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])+)\])

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

3 λεπτά πριν, pmav99 είπε

https://xkcd.com/208/

https://xkcd.com/1171/

https://xkcd.com/1313/

 Εγώ πάλι θα έλεγα ότι οι πιθανότητες να γράψει μόνος του ο μέσος προγραμματιστής ένα περίπλοκο regex και να κάνει λάθος είναι 100%. Άρα το 99% που αναφέρεις είναι ένα εξαιρετικό improvement :P

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 πας στις πηγές που έχεις και το βρίσκεις. Το θέμα είναι να μην το πάρεις στραβά και με φόβο😱

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 3 εβδομάδες αργότερα...
Δημοσ. (επεξεργασμένο)

Η πιο απλή regex που μπορώ να σκεφτώ είναι αυτή:

/([^:]*)$/
 

αλλά μου μυρίζει κι εμένα XY problem

Στις 8/10/2020 στις 1:27 ΜΜ, Predatorkill είπε


@pmav99 δεν ξερω τι ειναι πιο γρηγορο, το split ή το regex? Θα τρεξει σε .map σε array με μαξιμουμ ~500 στοιχεια

Αν η αμφιβολία είναι στο performance πήγαινε για split όπως ειπώθηκε εκτός αν έχεις ήδη πρόβλημα με την ταχύτητα και έχεις κάνει όλα τα αλλά σημαντικά βήματα για να βελτιώσεις την κατάσταση (db optimisation, caching, rendering etc). Μιλάς για διαφορά <1-2ms.

Επεξ/σία από t(o.ot)
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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