2017-01-05 14 views
0

Ich versuche, ein Regex-Muster zu schreiben, das Zeichenfolge zwischen dem ersten Vorkommen von Zeichen wo es beginnt mit "/" und kann entweder mit "/" oder enden "//" oder keiner. Zum Beispiel -Regex für Zeile beginnt mit einem Zeichen und endet mit einem der Zeichen

/test1/code1 
/test/code1/code2 
/test/code1//code2 

Alle oben genannten sollten Code1 zurückgeben.

habe ich versucht, folgende regex -

\/+.*?(\/|\/\/)(.*) 

Dies ist jedoch bei/folgenden test1 nur stoppt und gibt alles. d. h./code1 // code2.

Irgendein Vorschlag, wie ich sicherstellen kann, dass das Nachschlagen für Anfang mit/und endend mit entweder/oder // oder keiner ist?

+1

Strenge reguläre Ausdrücke geben Sie nicht mit einem Werkzeug für das, aber Sie Programmiersprache tut wohl. Welche Sprache verwendest du? – giusti

+0

können Sie [**^\/(. +?) (\/| $) **] (https://regex101.com/r/BSPgQd/1) verwenden –

Antwort

1

Dieser sollte die Arbeit machen:

/.+?/([^/]+)(?:/|$) 

Das Ergebnis ist in Gruppe 1.

Erläuterung:

/  : a slash 
.+?  : one or more any character not greedy 
/  : a slash 
([^/]+) : one or more any character that is not a slash 
(?:/|$) : Non capturing group either a slash or line end 

Hier ist ein Perl-Skript mit dieser Regex:

#!/usr/bin/perl 
use Modern::Perl; 
use Data::Dumper; 

my $re = qr!/.+?/([^/]+)(?:/|$)!; 
while(<DATA>) { 
    chomp; 
    say (/$re/ ? "OK: \$1=$1\t $_" : "KO: $_"); 
} 

__DATA__ 
/test1/code1 
/test/code1/code2 
/test/code1//code2 

Ausgang:

OK: $1=code1  /test1/code1 
OK: $1=code1  /test/code1/code2 
OK: $1=code1  /test/code1//code2 
Verwandte Themen