首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >html标记<blockquote>的preg_replace

html标记<blockquote>的preg_replace
EN

Stack Overflow用户
提问于 2012-11-20 01:59:35
回答 1查看 853关注 0票数 0

我有这2个字符串,并希望将其更改为html标记

代码语言:javascript
复制
1 : bq. sometext /* bq.+space+sometext+space or return

在这个字符串中,我想将它转换为以bq.+space开头,以空格或return结尾的字符串

代码语言:javascript
复制
<blockquote author="author" timestamp="unix time in secs">sometext</blockquote>

在此字符串中

代码语言:javascript
复制
2:  [quote author="author" date="unix time in secs"]
    some text
    [/quote] /* start with [qoute and get the text of author property then get
                sometext form between ']' and '[/qoute]

我想将它们转换为:

代码语言:javascript
复制
<blockquote author="author" timestamp="unix time in secs">sometext</blockquote>

此正则表达式不起作用!

代码语言:javascript
复制
#\bq(.| )(.*?)\n#
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 02:07:59

你把你的逃生搞混了。转义b使其成为单词边界。不对.进行转义将使其成为任意字符,将.和空格放在交替位置表示“不是...就是...”。这个正则表达式将处理您的第一个示例:

代码语言:javascript
复制
$str = preg_replace(
    '#bq\. (\S+)#',
    '<blockquote author="author" timestamp="unix time in secs">$1</blockquote>',
    $str
);

如果有人将它嵌套在quote标记中,那么第二个将会给您带来麻烦。但是假设在[quote...][/quote]之间没有其他的quotes,你可以使用这样的东西:

代码语言:javascript
复制
$str = preg_replace(
    '#\[quote(?=[^\]]*author="([^"]*))(?=[^\]]*timestamp="([^"]*))[^\]]*\](.*?)\[/quote\]#s',
    '<blockquote author="$1" timestamp="$2">$3</blockquote>',
    $str
);

这使用两个lookaheads来查找属性,并在捕获组$1$2中捕获它们的值。所有这些都没有推进字符串中的实际位置。lookaheads的好处是,它独立于这两个属性工作。然后我们匹配开始标记的其余部分,然后尽可能少地捕获(.*?),直到遇到[/quote]

Working demo.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13459451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档