1

PHP preg_replace を適切に動作させようとして立ち往生しています。パターンのすべての一致を見つけて、それらを文字列に置き換えたいです。しかし、何らかの理由で、部分的な一致のみを見つけて、それらすべてを置き換えています。テキスト ファイルのすべての行から「パスワード」を削除しようとしています。パスワードは常に各行の最後にあり、4 ~ 8 文字の英数字で構成され、常に 2 つのパイプ文字が続きます。

例:

$data = 'A00000001|A00000001|FirstName|LastName|email@address|Role||password'.PHP_EOL;
$data .= 'B00000002|B00000002|FirstName|LastName|email@address|Role||password'.PHP_EOL;
$delim = '|';

$newData = preg_replace("/".$delim.$delim."[a-zA-Z0-9]{4,8}/", $delim.$delim, $data);
echo $newData;

出力:

||||||1||||||||1||||||||e|||||||||||e||m||a||i| |l||@||a||d||d||r||e||s||s|||||R||o||l||e||||||||| ||| ||||||2||||||||2||||||||e|||||||||||e||m||a||i| |l||@||a||d||d||r||e||s||s|||||R||o||l||e||||||||| ||| ||

[a-zA-Z0-9]{#} の代わりに背中合わせのパターンを入れて、括弧を使用してさまざまなグループ化で多くのバリエーションを試しました。パターンに行の開始^と終了を追加しようとしました。$私は立ち往生しています。これは、私が見落としている単純なものになることを知っています。だからこそ、これについて新鮮な目が必要なのです。

4

3 に答える 3

0

区切り文字をエスケープできるようです。

$newData = preg_replace('/\'.$delim.'\'.$delim.'[a-zA-Z0-9]{4,8}/', $delim.$delim, $data);
于 2013-06-26T15:48:59.350 に答える