gpt4 book ai didi

php - 无法用 preg_replace() 中的其他内容替换 `$_`

转载 作者:行者123 更新时间:2023-12-04 07:20:30 27 4
gpt4 key购买 nike

我正在调查,但找不到解决方案。

想法是将字符串中的字符 $_ 替换为其他内容。如果您从 $search 变量中删除美元符号,它会起作用(但不是理想的方式)。

它不起作用,因为美元符号是一个特殊字符,但我找不到如何将它转义。

这是我的:

$search = '$_'; // replace to '_' OR '[$_]' it returs "$1" instead of "1"
$replace = 1;
$regex = '#".*?"(*SKIP)(*FAIL)|\b' . $search . '\b#s';

$fullInput = '"$_" $_';

$r = preg_replace([$regex], $replace, $fullInput);

echo $r . PHP_EOL;

// Output with current code : "$_" $_
// Output with '_' or '[$_]': "$_" $1
//
// Expected result: "$_" 1

To have into account, if the text is between quotes, it should not be replaced.

最佳答案

您可以使用此正则表达式进行搜索:

"[^\\"]*(?:\\.|[^\\"]*)*"(*SKIP)(*F)|\$_

并将其替换为 [$0]

| 之前的模式匹配双引号字符串,允许在两者之间使用转义引号。 | 之后的模式匹配 $_

RegEx Demo

正则表达式详细信息:

  • [^\\"]*(?:\\.|[^\\"]*)*":匹配双引号字符串。我们允许在此匹配中使用转义字符。
  • (*SKIP)(*F):跳过本场比赛并使其失败
  • |:或者
  • \$_:匹配文字文本$_

代码:

$search = '$_';
$replace = '[$0]';
$regex = '/"[^\\"]*(?:\\.|[^\\"]*)*"(*SKIP)(*F)|' . preg_quote($search, '/') . '/';
$fullInput = '"$_" $_';
$r = preg_replace($regex, $replace, $fullInput);
echo $r . PHP_EOL;

输出:

"$_" [$_]

关于php - 无法用 preg_replace() 中的其他内容替换 `$_`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68531232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com