2016-03-28 24 views
5

Ich habe die Regex-Zeichenfolge und ich möchte klassifizieren, hat diese Regex festen Präfix oder nein.Reguläre Ausdrücke fixed prefix

Zum Beispiel:

abcdef.*g[0abc]{0,5}hi hat Präfix abcdef

]1234vac.*12345 hat Präfix ]1234vac

(abc)+123 hat Präfix abc

aber

[A-z]+12345 nicht vorfixiert hat fix (es beginnt bei einer unbekannten Anzahl von Symbolen aus der Menge A-z)

Bin ich wirklich der Meinung, dass dieses Problem nicht in einer allgemeinen Form gelöst wird?

+0

Möchten Sie Präfix von diesen Zeichenfolgen erhalten? – Shafizadeh

+0

@ Shafizadeh, ja –

+0

und das Präfix ist was auch immer das mit '.' Endet? – Divisadero

Antwort

1

Versuchen Sie, diese 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

Sagen Sie mir weitere Beispiele, die nicht funktionieren, und ich werde dies ändern. Ich habe jedoch auf alle Beispiele in Ihrer Frage und Kommentare getestet

Auch, wie ist es überhaupt möglich, mit einer Frage diese kompliziert zu kommen! ;)

+0

Gute Arbeit! Deine Lösung deckt nicht alle Fälle ab, aber es sieht so aus, als ob ich es möchte. –

+0

@DenisGavrus Wenn Sie mir sagen, was es nicht abdeckt, kann ich es ändern. Wenn es Ihre Frage beantwortet, würde es Ihnen etwas ausmachen, es anzunehmen? – Druzion

+0

Ich denke, dass es nicht Chancen, dieses Problem im Allgemeinen mit Regex zu lösen, weil es viele Fälle hat, Sonderzeichen und andere entkommen (Es wäre perfekt, Präfix "http: \/\/stackoverflow \ .com" zu bekommen aus dem Regex 'http: \/\/stackoverflow \ .com \ /.*?\/[\ d] + 'aber ich verstehe, dass es auch fast unmöglich durch Regex (meine Aufgabe ist nicht für die Analyse von URL, es ist nur Beispiel)) Ihre Lösung, zum Beispiel, nehmen Präfix' abc' von Regex '(abc) * ', aber es ist kein Präfix, denn * - {0,} wird auch für' (abc)? 'wiederholt. Aber danke trotzdem, ich werde deine Antwort später akzeptieren, wenn ich keine anderen Antworten bekomme –