2017-01-05 11 views
0

「/」で始まり「/」で終わる文字の最初の出現と、「/」で始まる文字の最初の出現の間の文字列を取得する正規表現パターンを作成しようとしています。 "//"またはnone。たとえば、 -文字で始まり、いずれかの文字で終わる行の正規表現

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

上記のすべてがcode1を返す必要があります。

私は、正規表現、次の試してみました -

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

しかし、これが唯一のtest1の次/で停止し、すべてを返します。すなわち/ code1 // code2。

ルックアップが/で始まり、/または//で終了することを保証する方法に関する提案はありますか?

+1

厳格な正規表現を使用すると、そのためのツールを提供しませんが、あなたはおそらく言語をプログラミングありません。どの言語を使用していますか? – giusti

+0

[**^\ /(。+?)(\/| $)**](https://regex101.com/r/BSPgQd/1)を使用すると、 –

答えて

1

仕事をする必要があり、この1:

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

結果はグループ内にある1

説明:ここでは

/  : 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 

は、この正規表現を使用してperlスクリプトです:

#!/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 

出力:

OK: $1=code1  /test1/code1 
OK: $1=code1  /test/code1/code2 
OK: $1=code1  /test/code1//code2 
関連する問題