23

文字列の 2 番目のスラッシュの後と 3 番目のスラッシュの前に発生するテキストをキャプチャしたいと思います。例:

/ipaddress/データベース名/

データベース名だけを取得する必要があります。データベース名には、文字、数字、アンダースコアが含まれる場合があります。ありがとう。

4

6 に答える 6

23

どのようにアクセスするかは言語によって異なりますが、基本的には、2 番目と 3 番目の "/" の間にあるキャプチャ グループだけが必要です。文字列が常に例と同じ形式であると仮定すると、次のようになります。

/.*/(.*)/

複数のスラッシュが存在できるが、データベース名にスラッシュが存在できない場合は、次のようにします。

/.*/(.*?)/
于 2013-05-30T00:21:47.680 に答える
11
/.*?/(.*?)/

あなたの行が常に/行末にある場合:

([^/]*)/$

別のsplit方法:

split("/")[2]
于 2013-05-30T04:09:22.827 に答える
5

正規表現は次のようになります。

/[^/]*/([^/]*)/

したがって、Perl では、正規表現キャプチャ ステートメントは次のようになります。

($database) = $text =~ m!/[^/]*/([^/]*)/!;

通常、/文字は正規表現を区切るために使用されますが、一致の一部として使用されるため、別の文字を使用できます。または、/文字をエスケープすることもできます。

($database) = $text =~ /\/[^\/]*\/([^\/]*)\//;
于 2013-05-30T00:27:30.500 に答える
2

次のようにすると、パターンをさらに短縮できます。

[^/]+/(\w+)

ここ\wには次のような文字が含まれますA-Z, a-z, 0-9 and _

SPLIT関数を優先することをお勧めします。これは、RegEx 関数を使用できる場所であればどこでも優れたパフォーマンスを発揮したからです。

于 2013-05-30T05:11:27.537 に答える
1

あなたが具体的に正規表現を要求したことは知っていますが、これには正規表現は必要ありません。文字列を区切り記号 (この場合はバックスラッシュ) で分割し、必要な部分 (この場合は 3 番目のフィールド - 最初のフィールドは空) を選択するだけです。

  • cut例:

    cut -d '/' -f 3 <<< "$string"
    
  • awk例:

    awk -F '/' {print $3} <<< "$string"
    
  • perl式、split関数を使用:

    (split '/', $string)[2]
    

于 2013-05-30T03:53:52.147 に答える
1

explodefunction を他の言語と一緒に、PHPまたはsplit他の言語と一緒に使用して、そのような操作を行うことができます。

とにかく、ここに正規表現パターンがあります:

/[\/]*[^\/]+[\/]([^\/]+)/
于 2013-05-30T00:29:44.307 に答える