【问题标题】:php preg_replace regex with ? and &php preg_replace 正则表达式 ?和 &
【发布时间】:2013-10-09 07:03:44
【问题描述】:

我真的很想弄清楚如何为这个字符串写一个 preg_replace...

/url/?12345678910&stackoverflow=rocks

...我想成为...

/url/?_uniqueId_&stackoverflow=rocks

字符串包含更多的 ?s 和 &s,但是这是字符串中第一次出现的字符。

我尝试了以下方法,但它甚至没有给我回应:

preg_replace("/\/url\/\?[^)]+\&/","_uniqueId_",$link);

任何帮助将不胜感激。

【问题讨论】:

标签: php regex preg-replace


【解决方案1】:

您是否将preg_replace 的结果分配给变量?

$link = '/url/?12345678910&stackoverflow=rocks';
$res = preg_replace("/\/url\/\?[^)]+\&/","/url/?_uniqueId_&",$link);
echo $res;

另外,我从您错过的替换字符串中添加了其他部分。否则,正则表达式可以更改为:

$res = preg_replace("~/url/\?[^&]+&~","/url/?_uniqueId_&",$link);

这应该更快一些,并且我使用了不同的分隔符来避免过度转义。 & 也不需要转义。

或使用环视:

$res = preg_replace("~(?<=/url/\?)[^&]+(?=&)~","_uniqueId_",$link);

【讨论】:

  • 谢谢!你的第一个例子“有点”有效 - 它从第一个替换?到最后一个 &,不幸的是,它破坏了整个链接。另外两个例子我根本无法工作。但是,对第一个有什么想法吗?
  • @MadMarvin Strange...您可以将第一个更改为 /\/url\/\?[^)]+?\&amp;/ 以使其更好地工作。
  • @MadMarvin 哦,我忘了从正则表达式中删除 /。最后两个正则表达式现在都应该可以工作了。
猜你喜欢
  • 2011-05-20
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多