我需要用HTML标记<br>
替换换行符\n
或\r
,但仅限于[code]
UBB标记之外。
示例字符串,如何存储在DB中:
$string = "Test 123
Line break
[code]5: Test
10: With line
15: breaks[/code]
Further writing
Another new line";
使用以下代码:
$bbextended = array(
"/\[code\](.*?)\[\/code\](*SKIP)(*FAIL)|\\r?\\n/i" => "<br>",
"/\[code\](.*?)\[\/code\]/i" => "<textarea>$1</textarea>",
);
foreach($bbextended as $match=>$replacement){
$string = preg_replace($match, $replacement, $string);
}
echo $string;
最后得到以下HTML输出:
Line break<br>Test123<br>[code]5: Test<br>10: With line<br>15: breaks[/code]<br>Further writing<br>Another new line
这意味着[code][/code] UBB标记中的换行符被替换为<br>
(错误,不应该),代码元素没有被替换为<textarea></textarea>
(也是错误的)。
预期的HTML输出为:
Line break<br>Test123<br><textarea>5: Test
10: With line
15: breaks
</textarea><br>Further writing<br>Another new line
我试着用regex 101自己解决它,但是它突出了不应该突出的东西.. x1c 0d1x
我假设有一个问题是由实际的换行符和regex如何搜索引起的。
1条答案
按热度按时间ss2ws0br1#
"/[code[\w\W]*?code](*SKIP)(*FAIL)|\\r?\\n/i" => "<br>",
这看起来是可行的--检测多行代码标记的开始和结束,并跳过它们