我正在查看Wordpress自定义字段,其中用户使用回车输入一些文本,由于<br/>
,该字段将转换为wpautop
。
<?php echo wpautop(get_post_meta( get_the_ID(), 'customfield' , true)); ?>
我接下来需要做的是为这样获得的每一行添加<span>
,以便将一些样式应用于各个行。
我正在尝试使用preg_replace
和Regex,但这不起作用:
<?php
$subject = wpautop(get_post_meta( get_the_ID(), 'text1' , true));
$result = preg_replace('/(.*<br>)*/m', '<span>$1</span>', $subject);
?>
<div><?php echo $result; ?></div>
...因为它包裹了<span>
标签中的每个字符!
这有什么问题:'/((.*)<br>)*/m'
?
或许有更好的方法在php中执行此操作,拦截get_post_meta
?
答案 0 :(得分:2)
这是你的正则表达式:
$result = preg_replace('/(.*<br>)*/m', '<span>$1</span>', $subject);
1 - 删除第二个*
:
$result = preg_replace('/(.*<br>)/m', '<span>$1</span>', $subject);
2 - 在您的评论示例中,您有<br/>
,而不是<br>
,请选择斜杠:
$result = preg_replace('/(.*<br\/?>)/m', '<span>$1</span>', $subject);
3 - 让.*
不贪婪.*?
:
$result = preg_replace('/(.*?<br\/?>)/m', '<span>$1</span>', $subject);
4 - 更改分隔符以避免斜线:
$result = preg_replace('~(.*?<br/?>)~m', '<span>$1</span>', $subject);
5 - 斜线前可能有空格:
$result = preg_replace('~(.*?<br\s*/?>)~m', '<span>$1</span>', $subject);
6 - 试一试。