繁体   English   中英

使用正则表达式进行哈希替换不起作用

[英]Hash replacement with regular expression not working

在此文件中,我想用另一个哈希来更改UNDER_CONSTRUCTION_HASH,我使用正则表达式来实现。

文件:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

UNDER_CONSTRUCTION_HASH=y$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2

我想将UNDER_CONSTRUCTION_HASH替换为另一个:

$2y$10$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2

我的代码看起来像这样:

$envContent = $this->filesystem->get($envPath);
$regex = '/UNDER_CONSTRUCTION_HASH=[^\s]+/';
$newLine = sprintf('UNDER_CONSTRUCTION_HASH=%s', $hash);

if (preg_match($regex, $envContent)) {
    var_dump($newLine);
    $envContent = preg_replace($regex, $newLine, $envContent);
} else {
    $envContent .= "\n".$newLine."\n";
}

结果是这样的:

UNDER_CONSTRUCTION_HASH=y$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2

代替这个:

UNDER_CONSTRUCTION_HASH=$2y$10$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2

这有什么问题吗?

我的包裹: https : //github.com/larsjanssen6/underconstruction

这是逃脱美元符号的问题。

$hash注入$newLine并用作preg_replace()的替换参数时,该函数假定$2$1是捕获组引用。 您需要将斜线停在它们前面,以按实际方式对待它们。

这是一个重写:

代码:( 演示

$envContent='MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

UNDER_CONSTRUCTION_HASH=y$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2';

$hash = '$2y$10$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2';
$pattern = '/UNDER_CONSTRUCTION_HASH=\S+/';
$replace = "UNDER_CONSTRUCTION_HASH=".str_replace('$','\$',$hash);  // <-- escape your dollar signs
$newLine = "UNDER_CONSTRUCTION_HASH=$hash";

$envContent = preg_replace($pattern, $replace, $envContent, -1, $count);
if(!$count){
    //echo "no replacement made\n";
    $envContent .= "\n".$newLine."\n";
}

echo $envContent;

输出:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

UNDER_CONSTRUCTION_HASH=$2y$10$TwrFXK90UkJ4pq4grH1/hevPgkdOE4lEmPI9QbhVnwH1UEyYr/zA2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM