【问题标题】:How do I echo within preg_replace?如何在 preg_replace 中回显?
【发布时间】:2018-03-25 02:36:31
【问题描述】:

感觉卡住了。在stackoverflow上找不到答案。我需要在 preg_replace 中回显 $subcat 和 $cat。它不工作。有没有办法在 preg_replace 中回显?

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href="https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid="'. $subcat .'"&view=ads&catid="'. $cat .'"">#$1</a>', $text);

【问题讨论】:

  • 将您的完整代码与$cat$subcat$text 值放在一起
  • @MrK 请通过添加输入字符串和所需的输出字符串来完成您的问题。即使您收到了对您有帮助的答案,提供完整的问题也意味着您可能会收到更高质量的答案,这意味着未来的研究人员将更好地理解问题和所提供的答案。

标签: php preg-replace echo


【解决方案1】:

你可以这样试试吗?将这些变量放入花括号{var}

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href="https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid={$subcat}&view=ads&catid={$cat}">#$1</a>', $text);

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href="https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid='.$subcat.'&view=ads&catid='.$cat.'">#$1</a>', $text);

【讨论】:

  • 将它们显示为 {$subcat} 和 {$cat}。当我在 preg_replace 之外回显它们时,它们显示得很好。
  • 请把您的完整代码与所有 3 个变量一起放入。然后我会编辑我的答案
  • 您的第二个示例正在运行。所以我只是把双引号放在那里。谢谢。
  • 在第一个例子中都视为字符串,双引号可以用它的值替换变量。
【解决方案2】:

从href内的参数值中删除引号,使用"双引号将变量替换为其值,也将$1转义为文本

   $text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', "<a href='https://somesite.com/search?cityid=0&lang=en&search=\$1&subcatid=$subcat&view=ads&catid=$cat'>#\$1</a>", $text);

【讨论】:

    【解决方案3】:

    当不需要时,您将变量用双引号括起来。删除它。

    试试:

    $text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href="https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid='. $subcat .'&view=ads&catid='. $cat .'">#$1</a>', $text);
    

    【讨论】:

    • 谢谢。它现在正在工作。我放了不应该存在的双引号。
    【解决方案4】:

    您的模式可以使用i 模式修饰符稍微压缩,并通过省略捕获组并使用\K 重新启动全字符串匹配来提高效率。此外,您的替换字符串可以在不使用点连接的情况下写入,通过使用\\0\$0 来表示完整字符串匹配(否则将被写入(未转义)为$0\0)。

    代码:(Demo)

    $subcat = 1;
    $cat = 2;
    $text = 'This is a non-qualifying#HashTag and this has white space before it #Test9 and some more text.';
    $text = preg_replace('/(?<!\S)#\K[\da-z]+/i', "<a href=\"https://somesite.com/search?cityid=0&lang=en&search=\\0&subcatid=$subcat&view=ads&catid=$cat\">#\\0</a>", $text);
    echo $text;
    

    输出:

    This is a non-qualifying#HashTag and this has white space before it #<a href="https://somesite.com/search?cityid=0&lang=en&search=Test9&subcatid=1&view=ads&catid=2">#Test9</a> and some more text.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2010-10-20
      相关资源
      最近更新 更多