38

一致するグループを使用して、完全修飾パスのディレクトリとファイル名を解析する正規表現を作成しようとしています。

それで...

/var/log/xyz/10032008.log

認識group 1 to be "/var/log/xyz"し、group 2 to be "10032008.log"

単純なように見えますが、一致するグループを私の人生で機能させることができません。

注:一部の回答者が指摘しているように、これは正規表現の適切な使用法ではない可能性があります。通常、使用していた言語のファイルAPIを使用したいと思います。私が実際にやろうとしていることは、これより少し複雑ですが、説明するのがはるかに難しいので、根本的な問題を最も簡潔に説明するために、誰もが精通しているドメインを選択しました。

4

9 に答える 9

43

これを試して:

^(.+)\/([^\/]+)$

編集:正規表現をコピー/貼り付けするときの問題を防ぐためにスラッシュをエスケープしました

于 2008-10-03T21:44:56.760 に答える
11

ほとんどの言語には、これをすでに提供するパス解析関数があります。能力があれば、すぐに使えるものを無料で使用することをお勧めします。

/がパス区切り文字であると仮定します...

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

最初のグループはディレクトリ/パス情報に関係なく、2番目のグループはファイル名になります。例えば:

  • /foo/bar/baz.log: "/ foo / bar /"はパス、"baz.log"はファイルです
  • foo / bar.log: "foo /"はパス、"bar.log"はファイルです
  • / foo / bar: "/ foo /"はパス、"bar"はファイル
  • / foo / bar /: "/ foo / bar /"はパスであり、ファイルはありません。
于 2008-10-03T21:57:44.737 に答える
5

何語?そして、なぜこの単純なタスクに正規表現を使用するのでしょうか?

必要な場合:

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

必要な 2 つの部分が得られます。かっこを引用する必要がある場合があります。

^\(.*\)/\([^/]*\)$

好みの言語構文に応じて。

ただし、最後の「/」文字を検索する言語の文字列検索機能を使用し、そのインデックスで文字列を分割することをお勧めします。

于 2008-10-03T21:43:26.137 に答える
2

これはどうですか?

[/]{0,1}([^/]+[/])*([^/]*)

決定論的:

((/)|())([^/]+/)*([^/]*)

厳しい :

^[/]{0,1}([^/]+[/])*([^/]*)$
^((/)|())([^/]+/)*([^/]*)$
于 2011-12-03T18:08:44.140 に答える
0

これを試して:

/^(\/([^/]+\/)*)(.*)$/

ただし、パスの末尾にスラッシュが残ります。

于 2008-10-03T21:48:47.687 に答える