【问题标题】:regex not replacing all occurrences bbcode style正则表达式不替换所有出现的 bbcode 样式
【发布时间】:2016-07-22 22:52:20
【问题描述】:

这是我的字符串:

$str="[url=/someurl]Click Here[/url] [url=/someurl]Click Here2[/url]";

这是我的代码:

$str=preg_replace('/\[url=(.+?)\](.+?)\[\/url\]/', '<a href="\1" style="text-decoration:none;color:#336699">\2</a>', $str);

我的输出转换了第一个 url bbcode 样式部分,但第二个也没有转换。

我正在寻找的是一个全局正则表达式替代品。 正则表达式不太好,所以我真的不知道该怎么办目的是让preg_replace 占both bbcode urls

更新

这是我的代码:$str=preg_replace('/[url=(.+?)](.+?)[\/url]/s', '&lt;a href="\1" style="text-decoration:none;color:#336699"&gt;\2&lt;/a&gt;', $str);

这里是字符串:

$str="ou can call my cell phone, email or text message me via my contact info on my profile. 

[url=/profile/number]Click Here[/url]

Hope to hear from you all soon !!

[url=dasasdasd]asdasdasd[/url]";

这是我的功能:

 function bbcode($str) {
  $str=preg_replace('/\[url=(.+?)\](.+?)\[\/url\]/s', '<a href="\1" style="text-decoration:none;color:#336699">\2</a>', $str);
  return $str;
}

【问题讨论】:

  • 我无法重现您当前示例的问题。
  • @CasimiretHippolyte 中间有一些新行和措辞会改变结果吗?
  • 是的,因为点 . 默认情况下不匹配换行符。要更改此行为,请添加 s 修饰符。
  • 不,我不会,因为这个问题被问了很多很多次。
  • 您最近的更新、以前的更新、评论和第一个代码示例都冲突。请准确地说明你有什么。

标签: php regex preg-replace bbcode


【解决方案1】:

[] 是正则表达式中的特殊字符。它们是字符类,允许其中一个字符。

见:https://regex101.com/r/mN4tN9/1

[url=(.+?)]

对比:

\[url=(.+?)\]

(regex101 似乎已停止工作,因此无法发布第二个链接)

有关替换的功能演示,请参阅:https://eval.in/610316。

【讨论】:

  • 我添加了我的功能
  • @slicks1 所以HERE IS my code: 不是您的实际代码,对吗?
  • 这是函数的一部分,实际上代码相同
  • 所以我不应该逃跑吗?
  • 你应该逃,你之前逃了吗?如 regex101、上一个链接和 eval.in/610317 所示,代码在转义时有效。 s 修饰符实际上也不需要在这里,因为 . 匹配的字符串不会延伸到下一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多