正则表达式和php

发布于 2024-09-15 10:45:57 字数 392 浏览 2 评论 0原文

假设我有一个像这样的字符串:

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

如何使用正则表达式来查找 /* */ 的出现并像这样替换每个值:

/*quick*/ with the value of $_POST['quick']
/*fox*/ with the value of $_POST['fox']
/*dog*/ with the value of $_POST['dog']

我已尝试使用以下模式使用 preg_replace: ~/\*(.+ )\*/~e

但这似乎对我不起作用。

Say I have a string like this:

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

How can I use a regular expression to find the occurrences of /* */ and replace each value like so:

/*quick*/ with the value of $_POST['quick']
/*fox*/ with the value of $_POST['fox']
/*dog*/ with the value of $_POST['dog']

I have tried with preg_replace using this pattern: ~/\*(.+)\*/~e

But it does not seem to be working for me.

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

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

发布评论

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

评论(2

萌化 2024-09-22 10:45:57

模式 (.+) 太贪婪了。它会找到最长的匹配,即quick*/ Brown /*fox*/跳过了lazy /*dog,所以它不会工作。

如果 /**/ 之间不会出现 *,则使用:

preg_replace('|/\*([^*]+)\*/|e', '$_POST["$1"]', $string)

否则,使用惰性量词:

preg_replace('|/\*(.+?)\*/|e', '$_POST["$1"]', $string)

示例:http://www.ideone.com/hVUNA

The pattern (.+) is too greedy. It will find the longest match i.e. quick*/ brown /*fox*/ jumped over the lazy /*dog, so it won't work.

If there will be no * appear between /* and */, then use:

preg_replace('|/\*([^*]+)\*/|e', '$_POST["$1"]', $string)

Otherwise, use a lazy quantifier:

preg_replace('|/\*(.+?)\*/|e', '$_POST["$1"]', $string)

Example: http://www.ideone.com/hVUNA.

浸婚纱 2024-09-22 10:45:57

您可以概括这一点(PHP 5.3+,动态函数):

$changes = array('quick' => $_POST['quick'],
                 'fox'   => $_POST['fox'],
                 'dog'   => $_POST['dog']   );

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

echo preg_replace(
        array_map(function($v){return'{/\*\s*'.$v.'\s*\*/}';}, array_keys($changes)),
        array_values($changes),
        $string
     );

如果您想对替换内容进行精细控制。否则,KennyTM 已经解决了这个问题

问候

rbo

You can generalize this (PHP 5.3+, dynamic functions):

$changes = array('quick' => $_POST['quick'],
                 'fox'   => $_POST['fox'],
                 'dog'   => $_POST['dog']   );

$string = 'The /*quick*/ brown /*fox*/ jumped over the lazy /*dog*/.';

echo preg_replace(
        array_map(function($v){return'{/\*\s*'.$v.'\s*\*/}';}, array_keys($changes)),
        array_values($changes),
        $string
     );

if you want to have fine control over what gets replaced. Otherwise, KennyTM already solved this.

Regards

rbo

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