我正在尝试更新数据库表中的字段。该字段包含以下文字:
Course Focus: This course will focus on...
我想在此字段中添加一些Markdown语法,以便"课程焦点" part是一个标题,其余部分显示在它下面,它们之间有一个空行。有很多记录,我想我可以使用regexp_replace一次更新所有记录。我想要:
## Course Focus
This course will focus on...
我试过这个:
update courses
set course_focus = regexp_replace(course_focus, 'Course Focus:', '## Course Focus ##\n\r\n\r', 'g');
当在网页中显示时,它都是粗体并且没有换行符:
**Course Focus \n\r\n\r This course will focus on...** (all bold)
有什么想法吗?
答案 0 :(得分:0)
如果您需要在替换文本中添加文字反斜杠,请写
\\
。
在这种情况下,您确实需要一个文字反斜杠。请记住,您的SQL语句将被解释,\n
将被视为SQL语句中的换行符,而不是值中的换行符。但是,您希望将换行符作为值的一部分传递给字段,因此您需要额外的反斜杠:\\n
。然后,SQL语句解析器将删除一个反斜杠并将\n
传递给该字段以进行存储。您可以在this question中找到类似的问题。或者,正如该问题/答案中所指出的,您可以使用E
前缀来避免需要双重转义。
顺便说一句,你不需要回车:\r
。 Markdown解析器将行结尾标准化为\n
,作为其第一步。回车没有价值。当然,如果你真的想要它,你可以把它留在里面,但为了清楚起见,我已将它从我的例子中删除了。
此外,从您的描述中并未完全清楚,但如果“Course Focus:
”仅在每个字段中出现一次,则可以删除g
标记,这将加快该过程。使用g
标志时,正则表达式将需要继续搜索文本字段的其余部分,以便在第一次匹配后可能已停止时进行其他匹配。因此,您可能希望删除g
标记。
最终陈述应如下所示:
update courses
set course_focus = regexp_replace(course_focus, 'Course Focus:', '## Course Focus ##\\n\\n');
或者像这样,如果你使用E前缀:
update courses
set course_focus = regexp_replace(course_focus, 'Course Focus:', E'## Course Focus ##\n\n');