2016-06-20 14 views
2

zurückzukehren Wie einen generischen regulären Ausdruck zu schreiben, das wird
1) Capture-String nach dem ersten _ und vor dem zweiten _ als Gruppe 1
2) Capture-String nach dem letzten _ als Gruppe 2Regulärer Ausdruck Zeichenfolge aus dem Dateinamen

Beispiel

ASIA_JAP_TOKYO_201109 

OUTPUT Würde

group 1 - JAP 
group 2 - 201109 
+0

'/^[^_]+_([^_]+).*_([^ _] +) $/' –

Antwort

2

Sie können tun sein:

^[^_]*_([^_]*).*_([^_]*)$ 

Hier ist die erste erfasste Gruppe "JAP" und die zweite "201109".

  • ^[^_]*_ Matches bis zu den ersten _ von Anfang

  • Die erste Gruppe erfasst, fängt ([^_]*) die Zeichenfolge bis zu nächsten _

  • .*_ Gierig Spiele bis zum letzten _

  • ([^_]*)$ passt die Zeichenfolge nach dem letzten _ und legte es in erfassten Gruppe 2.

Demo

1

Zur besseren Lesbarkeit Zwecke, könnte ich zwei separate regulären Ausdruck für diesen Einsatz:

Erste regex:

^[^_]*_([^_]*?)_(.*)$ 

Zweite regex:

^(.*)_([^_]*)$ 

Aber wenn Sie ein Werkzeug wie Java oder Perl verwenden, würde ich lieber die Zeichenfolge in Unterstriche aufteilen und die gewünschten Teile extrahieren.