用 <br/> 替换换行符,在 <code> 标记内用   替换空格

Posted

技术标签:

【中文标题】用 <br/> 替换换行符,在 <code> 标记内用   替换空格【英文标题】:Replace newline with <br/> and spaces with &emsp; inside <code> tags 【发布时间】:2013-06-19 15:00:55 【问题描述】:

我想用对应的换行符和空格替换它们,以便它们在我的 android 应用程序中正确设置样式。

我想知道这个正则表达式的最佳方法。我尝试这样做以用 &lt;br /&gt; 替换换行符:

string.replaceAll("@<code>.*\\n*</code>@si", "<br />");

但它没有用。对于双倍空间的替换,我还没有想出任何办法。

所以这就是我想要实现的目标:

\n&lt;br /&gt;,从“双未编码空间”到&amp;emsp;

【问题讨论】:

你不能只使用PRE标签吗?这就是它的用途,有点 您可以尝试这里描述的 Apache Commons Lang 库:***.com/questions/1265282/… @amn 这是一个Android Textview,不支持pre标签。 【参考方案1】:

在 Java 中,您可以在 2 个替换调用中做到这一点:

string = string.replaceAll("\\r?\\n", "<br />");
string = string.replace("  ", " &emsp;");

编辑:

Matcher m = Pattern.compile("(?s)(?i)(?<=<code>)(.+?)(?=</code>)").matcher(string);
StringBuffer buf = new StringBuffer();
while (m.find()) 
    String grp = m.group(1).replaceAll("\\r?\\n", "<br />");
    grp = grp.replace("  ", " &emsp;");
    m.appendReplacement(buf, grp);

m.appendTail(buf);
// buf.toString() is your replaced string

我在第二次通话中故意使用了String#replace,因为我们并没有真正使用任何正则表达式。

正如@amn 评论的那样,您可以将字符串包装在&lt;pre&gt;&lt;/pre&gt; 标记中,并避免这些替换。

【讨论】:

我需要正则表达式只作用于 标记,而不是整个字符串。 好的,现在试试。如果您可以提供输入字符串的示例值,这将有所帮助。 这行得通,但有一个问题。我丢失了字符串中的&lt;code&gt; 标签。是什么原因造成的? 哦,我以为你想去掉代码标签。这就是为什么我没有捕捉到它。让我编辑一下。

以上是关于用 <br/> 替换换行符,在 <code> 标记内用   替换空格的主要内容,如果未能解决你的问题,请参考以下文章

我用换行符替换所有标签`<br>`

正则替换换行符和把 br 替换成换行符

js用正则把换行br替换为段落p

如何用 <br/> 替换换行符或 \r\n?

如何用 <br/> 替换某些回车换行符后跟破折号?

如何用 <br /> 元素替换字符串中的所有换行符?