2011-01-09 22 views
14

私は完全なReg-exp noobですので、私にご負担ください。 Googleにこれを試しましたが、まだ見つかりませんでした。正規表現:ドット(。)で始まるファイル名の一致?

.buildpathまたは.htaccessのように、ドットで始まるファイルに一致する正規表現を書くには、どのような方法が適していますか?

ありがとうございます!

答えて

17

ほとんどの正規表現言語では、^\.または^[.]は先頭のドットと一致します。

+0

私はあなたの2番目の正規表現が動作しているとは思わない。少なくともperl/java/phpではあなたが意図した通りに動作しません。 –

+3

@Toader:WTF?これは、Perl、Java、PHP、grep、awk、および私が今テストした他のツールで意図された通りに動作します。 – ephemient

+1

じゃあ、私は[]は内部表現とのいずれかを意味すると思った。任意のcharを意味します。私は特別なケースだと思う。それについて読む必要があります;)。申し訳ありませんが、あなたは正しいです。 –

4

^は、ほとんどの言語で文字列の先頭に一致します。これは先頭の.と一致します。ファイル名式を追加する必要があります。

同様に、$は、文字列の最後に一致します。

+2

「^ \。」で十分でしょうか?または '^ \ .. +'?あなたのものは例にマッチしますが、 '.1st_pwd'の奇妙なイベントは失敗します。 – Dan

+0

はい、[a-z]はファイル名の実際の式に置き換える必要があります。これは単なる例です。 – jasonbar

1

それはあなたが使用する正規表現ライブラリ上のビットを依存しますが、あなたはこのような何か行うことができます:文字列の先頭に

^\.\w+ 

^アンカー試合を、\.は(文字通りの期間と一致しました通常の正規表現ではエスケープされていない.は任意の文字に一致するため)、\w+は1つ以上の "単語"文字(英数字_)と一致します。

Perlスタイルの正規表現とその構文の詳細は、perlreのマニュアルを参照してください。

1

ファイル名にはどの文字が有効かは、OSとファイルシステムによって異なります。なり、Windowsの例えば

、:

^\.[^<>:"/\\\|\?\*\x00-\x1f]+$

上記の式は意味:

  • マッチ少なくとも続くリテラル文字.
  • で始まる文字列1(無効な文字のクラス全体が続きます)

ファイル名ではどの文字が許可されていないかについては、参考としてthisを使用しました。あなたは簡単な式

^\\..* 

^を記述する必要がありますJavaでドットで始まる文字列に一致するように

1

は正規表現が文字列
\の先頭から一致することを意味します。文字列リテラル "。"で始まることを意味します。
。*はドットの後に0以上の文字が続くことを意味します。

1

それぞれのエスケープ文字には\を代入する必要があります。しかし、PowerShellの下に私が使用する正規表現は次のとおりです。^(\.)+\/

テストケース:

"../NameOfFile.txt" -match '^(\\.)+\\\/' 

作品、

"_./NameOfFile.txt" -match '^(\\.)+\\\/' 

はそうではありません。

当然のことながら、ここで何が起こっているのか聞かれるかもしれません。

\\.)は、.の後に前の文字と少なくとも1回以上一致する+を検索します。

最後に、\\\/は、それがウィンドウファイルパスに適合することを保証します。

関連する問題