使用 PHP 和正则表达式向 Wordpress 页面内容的每一行添加标记

Adding markup to each line of a Wordpress page content using PHP and Regex

我正在查看一个 Wordpress 自定义字段,用户在其中输入一些带有回车符 returns 的文本,由于 wpautop.[=20,这些文本将被转换为 <br/> =]

<?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></span>', $subject); 
?>

<div><?php echo $result; ?></div>

...因为它将每个字符都包装在 <span> 标签中!

这有什么问题:'/((.*)<br>)*/m'

或者 php 中可能有更好的方法,拦截 get_post_meta?

这是你的正则表达式:

$result = preg_replace('/(.*<br>)*/m', '<span></span>', $subject); 

1 - 删除第二个 *:

 $result = preg_replace('/(.*<br>)/m', '<span></span>', $subject); 

2 - 在您的评论示例中,您有 <br/>,而不是 <br>,使斜杠可选:

 $result = preg_replace('/(.*<br\/?>)/m', '<span></span>', $subject); 

3 - 让 .* 不贪心 .*?:

 $result = preg_replace('/(.*?<br\/?>)/m', '<span></span>', $subject); 

4 - 更改定界符以避免转义斜杠:

 $result = preg_replace('~(.*?<br/?>)~m', '<span></span>', $subject); 

5 - 斜线前可能有空格:

 $result = preg_replace('~(.*?<br\s*/?>)~m', '<span></span>', $subject); 

6 - 试一试。