0

そのため、特にpreg_replaceで使用するために、phpでPCRE正規表現を作成しようとしています。これは、text(.txt)ファイル名を構成する任意の数の文字と一致します。これから、ファイルのディレクトリを取得します。

私の最初のアプローチは、終了する.txt文字列を定義してから、/または\を除くすべての文字に一致する文字を指定しようとしたため、次のようになりました。

'/[^\\\\/]*\.txt$/'

しかし、これはまったく機能していないようでした。否定をデモルガンの形式、別名:(A + B)'<=>A'B'として解釈している可能性があると思います。

しかし、このテストを試みた後:

'/[^\\\\]\|[^/]*\.txt$/'

同じ結果になり、or演算子(|)をエスケープするべきではないと思いましたが、これも一致しませんでした。誰かが私が間違っていることを知っていますか?

4

2 に答える 2

2

次の正規表現は、.txt ファイルのファイル名を取得するために機能するはずです。

$regex = "#.*[\\\\/](.*?\.txt)$#";

使い方:

  • .*貪欲であるため、できるだけ右に一致するように強制します。
  • [\\\\/]ファイル名の前に\またはがあることを確認します。/
  • (.*?\.txt)貪欲ではない一致を使用して、ファイル名ができるだけ小さくなるようにし、その後.txtに を付けてグループ 1 に取り込みます。
  • $一致が文字列の最後になるように強制します。
于 2011-01-16T09:10:10.570 に答える
0

このパターンを試してください'/\b(?P<files>[\w-.]+\.txt)\b/mi'

$PATTERN = '/\b(?P<files>[\w-.]+\.txt)\b/mi';
$subject = 'foo.bar.txt plop foo.bar.txtbaz foo.txt';
preg_match_all($PATTERN, $subject, $matches);
var_dump($matches["files"]);
于 2011-01-16T09:14:05.667 に答える