【问题标题】:Regular Expression with wordpress shortcodes attributes带有 wordpress 简码属性的正则表达式
【发布时间】:2021-04-30 16:37:08
【问题描述】:

我们有以下短代码,

[show_portfolio get="yachts" for="sale" in="europe" sort="length_overall" by="asc" page="1" perpage="18" theme="active-71" ref="http://replaceme.com" debug="true" engine="engine.com"]

[get_portfolio get="yachts" for="sale" in="europe" sort="length_overall" by="asc" page="1" perpage="18" theme="active-71" ref="http://replaceme.com" debug="true" engine="engine.com"]

我们想用http://targetadress.com替换http://replaceme.com

用下面的正则表达式替换不是一个好主意,因为它也会捕获一个 href 标签 ref="[^"\r\n]*"

https://regex101.com/r/q1uumb/1/

我想知道是否有人帮我将 (show|get)_portfolio 标签内的http://targetadress.com 替换为http://replaceme.com

我找不到按照正则表达式运行的方法\[(show|get)_portfolio ref="(.+)"]

提前致谢

【问题讨论】:

  • 这需要澄清一下:这些短代码是否已经在您的内容中? ref 值是否对所有这些都相同?你想在哪里运行正则表达式?
  • @disinfor 短代码已经在内容中。参考值总是不同的。但是属性名称(ref)总是相同的
  • 这是您的简码吗?还是来自主题/插件?新的targetadress.com 总是一样吗?或者如果replaceme.com 是一个特定的值,那么targetadress.com 将是一个特定的值?
  • 是的,这是我们的简码。它不是主题/插件。 targetadress.com 也总是与众不同。它应该是可变的

标签: php regex wordpress shortcode


【解决方案1】:

你可以使用:

$repl = preg_replace(
   '\[(?:show|get)_portfolio\s+[^]]* ref="\Khttp://replaceme\.com"',
   'http://targetadress.com"',
   $str);

如果您想匹配ref= 中的任何网址,请使用:

$repl = preg_replace(
   '\[(?:show|get)_portfolio\s+[^]]*\s+ref="\K[^"]+"',
   'http://targetadress.com"',
   $str);

RegEx Demo

正则表达式详细信息:

  • \[:匹配一个[
  • (?:show|get)_portfolio:匹配 get_portfolio 或 show_portfolio
  • \s+: 匹配 1+ 个空格
  • [^]]*\s+ref=":匹配 0 个或多个非] 字符,后跟 1+ 空格,后跟 ref=
  • \K: 重置比赛信息
  • http://replaceme\.com":L 匹配http://replaceme\.com"

【讨论】:

  • 你拯救了我的一天。我想知道您是否更正了 RexEx 演示地址以供将来参考。
  • 谢谢。是否也可以添加finish“]”?
  • 这将是不必要且低效的,因为我们需要的只是短代码中的ref="..."。我们使用[^]]* 来确保ref= 在关闭] 之前出现
  • @anumhava 我刚刚做到了。
  • @anumhava,是否可以在没有 (") 的情况下使用正则表达式 replaceme.com 而不是 replaceme.com"?
猜你喜欢
  • 2012-12-08
  • 2011-02-03
  • 2012-04-21
  • 1970-01-01
  • 2010-09-08
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
相关资源
最近更新 更多