2016-03-28 17 views
5

Ho la stringa regex e voglio classificare, questa regex ha prefisso fisso o no.Espressioni regolari prefisso fisso

Ad esempio:

abcdef.*g[0abc]{0,5}hi ha prefisso abcdef

]1234vac.*12345 è prefisso ]1234vac

(abc)+123 ha prefisso abc

ma

[A-z]+12345 non significa Fissata pre correzione (inizia dal numero sconosciuto di simboli dal set A-z)

Sono davvero consapevole che questo problema non sarà risolto in una forma generale?

+0

Vuoi ottenere il prefisso da quelle stringhe? – Shafizadeh

+0

@Shafizadeh, sì –

+0

e il prefisso è ciò che finisce con "."? – Divisadero

risposta

1

Prova questa RegEx:

^(
    (     # GENERAL before . (Dot) 
    (?!\w+\?)    # DO NOT MATCH if contains ? 
    [\w\]\)]+    # Word, ] or) characters 1 or more times 
)| 
    (?:\((\w+)\))|  # Words in between BRACKETS() 
    (     # BEFORE . (Dot) with ?, * or + 
     [\w\]\)]+    # Select Characters 
     (?![?*+])    # DO NOT select last character if there is ?, * or + after it 
) 
) 

Live Demo on Regex101

Dimmi altri esempi che non funzionano e cambierò questa. Ho comunque testato tutti gli esempi nella tua domanda e commenti

Inoltre, come è possibile arrivare a una domanda questa complicata! ;)

+0

Ottimo lavoro! Il tuo risolvere non copre tutti i casi, ma sembra che io voglia quello che voglio. –

+0

@DenisGavrus Se mi dici che cosa non copre, posso cambiarlo. Inoltre, se rispondesse alla tua domanda, ti dispiacerebbe accettarlo? – Druzion

+0

Penso che non ci siano possibilità di risolvere questo problema in generale usando regex, perché ha molti casi, caratteri speciali di escape e altro (sarebbe perfetto per ottenere il prefisso 'http: \/\/stackoverflow \ .com' da regex 'http: \/\/stackoverflow \ .com \ /.*?\/[\ d] + 'ma capisco che sia troppo quasi impossibile da regex (il mio compito non è quello di analizzare l'url, è solo un esempio)) La tua risoluzione, ad esempio, prende il prefisso' abc' da regex '(abc) * ', ma non è prefisso, perché * - {0,} ripete anche per' (abc)? '. Ma grazie comunque, accetterò la tua risposta più tardi, se non ottengo altre risposte –