在 PHP 中的 preg_replace 中使用 $ 变量

发布于 2024-08-05 02:40:52 字数 351 浏览 3 评论 0原文

嗯...如何在 preg_replace 调用中使用变量?

这不起作用:

foreach($numarray as $num => $text)
    {
        $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
        $replacements[] = '<ces>$1<$text/>$2</ces>';
    }

是的,$num 前面有一个加号。是的,我想“将 $num 标记为 <$text/>”。

Ummm... how do I use variables in a call to preg_replace?

This didn't work:

foreach($numarray as $num => $text)
    {
        $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
        $replacements[] = '<ces>$1<$text/>$2</ces>';
    }

Yes, the $num is preceeded by a plus sign. Yes, I want to "tag the $num as <$text/>".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖乖 2024-08-12 02:40:52

您的替换模式看起来不错,但由于您在匹配模式中使用了单引号,因此您的 $num 变量不会被插入其中。相反,请尝试

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

另请注意,当从像这样的“未知”输入构建模式时,通常最好使用 preg_quote。例如,

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';

虽然我猜想给定变量名称,但在您的情况下它始终是数字。

Your replacement pattern looks ok, but as you've used single quotes in the matching pattern, your $num variable won't be inserted into it. Instead, try

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

Also note that when building up a pattern from "unknown" inputs like this, it's usually a good idea to use preg_quote. e.g.

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';

Though I guess given the variable name it's always numeric in your case.

执着的年纪 2024-08-12 02:40:52

变量只会在 字符串中展开用双引号声明。因此,要么使用双引号:

$patterns[]     = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";

要么使用字符串连接:

$patterns[]     = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

您还应该看看 preg_quote< /a> 如果您的变量可能包含正则表达式元字符。

Variables will only be expanded in strings declared with double quotes. So either use double quotes:

$patterns[]     = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";

Or use string concatenation:

$patterns[]     = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

You should also take a look at preg_quote if your variables may contain regular expression meta characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文