-1

完全なファイル パスからファイル名を検索する正規表現を作成しようとしていますが、ディレクトリだけを返すことはできません。たとえば、一致するものが見つからないときにC:\Users\IgneusJotunn\Desktop\file.doc返される必要がfile.docあります。C:\Users\IgneusJotunn\Desktop\folderこれらはすべて Word または Excel ファイルですが、私はそれに依存したくありません。これ:

StringRegExp($string, "[^\\]*\z",1) 

最後のスラッシュの後にあるものは何でも見つけますが、ファイルとフォルダーを区別することはできません。これ:

StringRegExp($string, "[^\\]*[dx][ol][cs]\z",1)

ほとんど動作しますが、醜いハックであり、docx または xlsx ファイルが存在する可能性があります。さらに、ファイルはMyNamesDoc.doc. ピリオドを検索できれば簡単に解決できますが.、エスケープでは機能しないように見える使用文字 (改行を除く任意の 1 文字を意味します) です。これ:

StringRegExp($ue_string, "[^\\]*\..*\z",1)

最後のバックスラッシュの後に何かを見つけ、ピリオドを含むものだけをキャプチャします。期間を組み込む方法は?または、ファイルを一致させる方法はありますか?

編集:自分の質問に答えました。なぜうまくいかなかったのか、もっとエレガントな解決策があるのか​​ に興味があります。

4

3 に答える 3

1

うーん、退屈だ。あなたはこれを行うことができます:

$sFile = StringRegExp($sPath, "[^\\]+\.(?:doc|xls)x?$", 1)

フォルダーにそのような名前が付けられないという保証はないため、確実にファイル/フォルダーの属性を確認する必要があります。ただし、「.docx」のような名前でフォルダに名前を付ける人がいるとは思えません。

于 2012-06-30T00:40:21.687 に答える
1
Local $string = StringRegExp($string, "[^\\]*\.doc\z|[^\\]*\.docx\z|[^\\]*\.xls\z|[^\\]*\.xlsx\z",1)

実際、ピリオドは、ほとんどの特殊文字が使用するのと同じエスケープ スラッシュで機能します。ドキュメント タイプに関しては、Or パイプと別の拡張子がうまく機能します。何らかの理由で拡張子を追加する必要がある場合は、別の Or.

于 2012-06-28T19:11:21.100 に答える
-1
  • 文字列を逆にします。
  • 「。」を探します。
  • StringInStr (および/または "/") で "\" を探します。
  • StringinStr のリターンから右側をトリム
  • もう一度裏返します。
于 2012-06-30T22:34:41.140 に答える