2013-03-08 8 views
15

Voglio cercare le occorrenze di ad e abcd dove il bc è facoltativo. Come lo posso fare? Per esempio,vim regex per "abcd", dove "bc" è facoltativo?

+-------+----------+ 
| ad | MATCH | 
| abcd | MATCH | 
| abd | NO match | 
| abbd | NO match | 
| abced | NO match | 
| abcbcd| NO match | 
+-------+----------+ 

risposta

23

Soluzioni:
Opzione 1: ad\|abcd
opzione 2: a\(bc\)\=d
opzione 3: a\(bc\)\?d

Vicino ma non abbastanza:
opzione 4: a\(bc\)\{-\}d (zero o più; corrisponde a abcbcd quale non desiderato)

Descrizioni:

+--------+--------------------------+ 
| \|  | logical OR (alternation) | 
| \(bc\) | treat `bc` as a group | 
| \=  | zero or one occurrences | 
| \?  | zero or one occurrences | 
| \{-\} | zero or more occurrences | 
+--------+--------------------------+ 
+2

Cosa? ,, perché hai posto una domanda se si conosce la risposta? Io sono ** non ** in basso elettore! –

+3

[http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/](http://blog.stackoverflow.com/2011/07/ è-ok-to-ask-and-answer-your-own-questions /) @GrijeshChauhan – Tim

+0

@Tim Grazie link molto bello .. Quindi la risposta merita + la sua risposta in realtà buona .. –

5

bene, forse stupido, ma se il requisito è

ricerca di occorrenze di annuncio e abcd dove il BC è facoltativa.

perché non semplicemente e semplice /ad\|abcd?

+0

+1; Da una prospettiva di _VimGolf_ (cioè poche battute di tastiera) hai ragione. Il risultato conta più, dopo tutto! –

+0

Sì, mi piace di più. Grazie @Kent! –