删除第一个换行符的preg_replace
-
13-09-2019 - |
题
我正在写一些PHP到BB码转换为HTML。
我想此的BBcode转换:
[quote]
Hello World
[/quote]
到以下内容:
<blockquote>Hello World</blockquote>
,我使用来执行此preg_replace函数的功能是:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
这几乎做的一切我需要它,但我的问题是,它承载通过的\ n之前的“Hello World”之后的,并产生:
<blockquote>
Hello World
</blockquote>
任何想法我怎么能解决这个问题?所有帮助非常感谢。
解决方案
尝试此正则表达式:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
其他提示
您需要逃避双引号内反斜线。而不是 “\ [”,需要 “\\”。
一个可能性是使用“e
” 正则表达式改性剂时,调用,例如,在字符串trim
功能。
引用手册的该网页:
<强>电子强>(
PREG_REPLACE_EVAL
)结果,如果设定了此修正,preg_replace()
不正常的替换 在更换反向引用 串,评估其作为PHP代码, 使用用于替换的结果 搜索字符串。单引号,双 引号,反斜杠(\
)和NULL
字符将用反斜杠进行转义 在取代的反向引用。只有
preg_replace()
使用此 改性剂;它是由其他PCRE忽略 功能
,点击 例如,该代码,只从你的稍有不同:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
会给你:
string '<blockquote>Hello World</blockquote>' (length=36)
即 trim
函数被调用什么是匹配的 - 注意它会删除所有的空格在开始和你的字符串的结尾;不仅换行符,而且空间和表格。
(例如,可以采取在的手册页preg_replace
一个看看实施例#4 >)
点击(这也许在这种情况下,有些矫枉过正,我要补充 - 但它很高兴反正就知道了)的
不隶属于 StackOverflow