Preg_replace 带有可选的换行符

Preg_replace with optional newlines

我目前正在努力使用正则表达式。我处理的一些字符串末尾有换行符,有些则没有。但我希望这些换行符在我添加的 html 之外。起初我的正则表达式中没有换行代码,但随后换行符在结束标记之前返回。我用当前代码修复了这个问题,但现在它不再正确处理末尾没有换行符的字符串。

所以我正在尝试更改我的代码,return 换行符存在时,但在没有换行符时也处理字符串。

我当前的代码:

preg_replace('/^(m:|maken:)(.*)([\r\n])/i', $makenblokje . '<em class="markeerroze"></em>', $regel, 1, $teller);
                               ^^^^^^^^                                                    ^^

我认为解决方案应该在下划线部分,但我无法用我正在寻找的结果修复它。

您可以通过在模式后面加上 ? 来使模式可选(即允许它的 0 或 1 个实例),所以这应该为您完成:

'/^(m:|maken:)(.*)([\r\n])?/i'

但我认为去掉所有进入的换行符会更容易,反正它们不会在输出中呈现。

[\r\n] 匹配 \r\n。为了匹配任何类型的换行符,使用 \R? 使其成为可选的:

preg_replace('/^(m:|maken:)(.*)(\R?)/i', $makenblokje . '<em class="markeerroze"></em>', $regel, 1, $teller);