使用PHP和Regex将标记添加到Wordpress页面内容的每一行

时间:2017-01-26 16:37:03

标签: php regex wordpress preg-replace

我正在查看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

1 个答案:

答案 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 - 试一试。