【问题标题】:Regex to replace hash-enclosed `##WORD=123##` to square bracketed`[object word=123]`正则表达式将散列括起来的`##WORD=123##`替换为方括号`[object word=123]`
【发布时间】:2018-07-13 16:01:12
【问题描述】:

我想用方括号替换主题标签,并在第一个方括号后添加一个单词,并且所有字符串都需要小写。

示例字符串:

$str = "This is some text  
<p>##IDOBJECT=784##</p> and another some text 
<p>##IDOBJECT=1509##</p>
<p>##LATESTARTICLESHOME=321##</p>
<p align=\"center\">##IDOBJECT=321##</p>";

我想用[object idobject=123] 替换##IDOBJECT=123## 格式化字符串。请注意,这里在第一个 [ 括号和 IDOBJECT 字符串转换为 idobject 之后添加了额外的 object 单词。 我尝试了这个/(\##.*?\##)/ 正则表达式来查找这些字符串,但无法按照我的描述进行替换。

【问题讨论】:

  • 在您解释转换之前,给您一个正则表达式是没有意义的。这是杂事还是什么?它是必须存在的吗,= 是否需要解析...?

标签: php regex


【解决方案1】:

您的正则表达式是正确的,您只需要调整捕获的位置。在#s 内移动组。 # 也没有什么特别之处,所以不需要转义。

##(.*?)##

演示:https://regex101.com/r/meYYna/1/

... 或者我可能读错了,如果您还想将返回值小写,请使用 preg_replace_callback 和 strtolower。

$str = "This is some text  
<p>##IDOBJECT=784##</p> and another some text 
<p>##IDOBJECT=1509##</p>
<p>##LATESTARTICLESHOME=321##</p>
<p align=\"center\">##IDOBJECT=321##</p>";
echo preg_replace_callback('/##(.*?)##/', function($match){
    return strtolower('[object ' . $match[1] . ']');
}, $str);

https://3v4l.org/ijZiO

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多