### 正则表达式替换包含换行字符的字符串问题 ###

老紫竹 2008-02-14 01:22:12
原始字符串
"插入1插入2\n\r\n"


目的字符串
<strong>插入1</strong><strong>插入2

</strong>


现用的表达式
str.replaceAll("\\[b\\](.*?)\\[/b\\]", "<strong>$1</strong>");


现在的替换结果
<strong>插入1</strong>插入2



也就是说,第二个之间包含了换行,比如\r\n 或者\n之类的。就匹配不上了。
...全文
709 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
“(?)”这种形式的是非捕获组,Pattern的API中也有的,你可能当作括号了吧,嘻嘻
老紫竹 2008-02-15
  • 打赏
  • 举报
回复
Enter your regex: (?i)foo

我晕,我就是为了找这个,花费了我20分钟,气死我了,我放了好多地方,最后发现,感情那个小括号是需要的
我一直
?s 呢,放在了几乎每个地方,都不对,最后发现,还得加上小括号!
  • 打赏
  • 举报
回复
上面有个(?i)的例子,有一次看到的,呵呵,我发现还可以组合着用,像(?is)这样。
  • 打赏
  • 举报
回复
shan1119 2008-02-14
  • 打赏
  • 举报
回复
跟bao的意思一样.
		Matcher m = Pattern.compile("\\[b\\](.*?)\\[/b\\]", Pattern.DOTALL).matcher(str);
str = m.replaceAll("<strong>$1</strong>");
老紫竹 2008-02-14
  • 打赏
  • 举报
回复
火龙果 对正则很熟悉啊!哈哈哈!我找了20分钟才找到!
语法找到了,主要是不知道放在哪里?嘿嘿!
看来你仔细研究过这东西!

应该写几个教程出来分享一下你的正则的经验!
rain_night 2008-02-14
  • 打赏
  • 举报
回复
学习一下!感谢
zero1111 2008-02-14
  • 打赏
  • 举报
回复
str.replaceAll("\\[b\\]([^\\[].*?)\\[/b\\]", "<strong>$1</strong>");
好久没看了,不知道写的对不对,别笑话阿,关注中.
iambic 2008-02-14
  • 打赏
  • 举报
回复
.默认不匹配换行。
aunty_flybird 2008-02-14
  • 打赏
  • 举报
回复

[code={Java}]{\s A whitespace character: [ \t\n\x0B\f\r]
可以使用\s来匹配所有换行空格等特殊字符

需要的表达式:.*\s*
}[/code]
dracularking 2008-02-14
  • 打赏
  • 举报
回复
yes . may or may not match line terminators
str = str.replaceAll("\\[b\\]((.|\n|\r)*?)\\[/b\\]", "<strong>$1</strong>");
  • 打赏
  • 举报
回复
加上DOTALL的内嵌表达式“(?s)”就可以了。

str.replaceAll("(?s)\\[b\\](.*?)\\[/b\\]", "<strong>$1</strong>");
aunty_flybird 2008-02-14
  • 打赏
  • 举报
回复
.*并不能包含对于\r\n的处理,

"\\[b\\](.*( |\r|\n|\t)*)\\[/b\\]", "<strong>$1</strong>"
boyu_song 2008-02-14
  • 打赏
  • 举报
回复
str = str.replaceAll("\\[b\\](.*?)\\n\\r\\n\\[/b\\]", "<strong>$1\\\n\\\r\\\n</strong>");
枫叶rain 2008-02-14
  • 打赏
  • 举报
回复

没看明白

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧