3

次の形式でパスを抽出したいと思います。

$/Server/First Level Folder/Second_Level_Folder/My File.extension

ここでの課題は、パスが次のように「自由形式」の電子メールに埋め込まれていることです。

こんにちは、

 You can download the file here:
  • $/Server/First Level Folder/Second_Level_Folder/My File.extension <- クリックしてください!

文字列を指定して、RegEx を使用してその文字列からすべてのパスを抽出したいと思います。これは可能ですか?

ありがとう!

4

2 に答える 2

10

はい、これは可能(\$/.*?\.\S*)です。

\$/パスの開始に一致

.*?正規表現の次の部分までのすべてに一致します

\.\S*ドットと空白以外のもの (スペース、タブ) に一致します

そしてその( )周りは、一致するものすべてをキャプチャします。

編集:

さらなる使用のために

ただのパス

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

ファイル名だけ

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

于 2013-05-15T10:54:18.567 に答える
3

ファイル名に[エスケープされたスラッシュ/またはピリオド記号が含まれていない]が含まれており、ファイルパススペースがバックスラッシュ「\」でエスケープされている場合でも、これを使用できます(スラッシュとバックスラッシュをエスケープしました)

(\/.*?\/)((?:[^\/]|\\\/)+?)(?:(?<!\\)\s|$)

正規表現の視覚化

Debuggex デモ

これにより、パス用とファイル ベース名用の 2 つのキャプチャ グループが作成されます。テスト文字列にエスケープされていないスペースを含むファイル名が含まれている場合 (示されているように)、B8vrede の回答に従って、ファイル名のピリオドをアンカーとして使用する必要があります。

于 2015-03-12T09:23:55.387 に答える