php正则表达式怎样去掉换行符\r\n

WormJan 2012-10-11 01:26:03
现在有这么一段字符串:
abcxyz
qwerty
[abc]aaaaaaaa
bbbbbbbbb
ccccccccc[/abc]
poiuyt
lkjhgf
[abc]
dddddd
eeeeeee
ffff[/abc]
poiuy
asdfg

我希望用个正则表达式,把[abc]和[/abc]之间的换行符(也就是\r\n)给替换掉。但是[abc]和[/abc]之外的字符串的换行符保留不变。
上面的是个例子,有可能是这种情况[abc]xxxx[/abc][abc]......,也就是前一个[/abc]和后一个[abc]紧挨着。

如果能兼容linux和windows(换行符好像不一样),就更完美了。

弄了一晚上,请教了群友,仍然没有解决,只好来麻烦大家了。
...全文
792 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WormJan 2012-10-11
  • 打赏
  • 举报
回复
preg_replace_callback 这个没用过。学习了。
感谢各位高手的解答。
xuzuning 2012-10-11
  • 打赏
  • 举报
回复
修正符e 的作用于 js 里的正则一样,都可执行简单的语句

如果要对匹配到的内容做较复杂的处理,那势必要写个函数
这时 preg_replace_callback 的威力就显现出来了
WormJan 2012-10-11
  • 打赏
  • 举报
回复
谢谢楼上的几位朋友。
那行代码用的修正符e就是可以对匹配项再编辑是吧?

昨晚想一次性把[abc]里的东西替换呢,结果没弄出来。呵呵。
码无边 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

PHP code
$s =<<< TXT
abcxyz
qwerty
[abc]aaaaaaaa
bbbbbbbbb
ccccccccc[/abc]
poiuyt
lkjhgf
[abc]
dddddd
eeeeeee
ffff[/abc]
poiuy
asdfg
TXT;

echo preg_replace('#\[abc].+?\[/abc]#se', 'preg_replace("/[……
[/Quote]正则的威力太大了
xuzuning 2012-10-11
  • 打赏
  • 举报
回复
$s =<<< TXT
abcxyz
qwerty
[abc]aaaaaaaa
bbbbbbbbb
ccccccccc[/abc]
poiuyt
lkjhgf
[abc]
dddddd
eeeeeee
ffff[/abc]
poiuy
asdfg
TXT;

echo preg_replace('#\[abc].+?\[/abc]#se', 'preg_replace("/[\r\n]+/","","$0")', $s);
abcxyz
qwerty
[abc]aaaaaaaabbbbbbbbbccccccccc[/abc]
poiuyt
lkjhgf
[abc]ddddddeeeeeeeffff[/abc]
poiuy
asdfg

其实 helloyou0 是对的,只是他没有注意到你的 [abc] 是两段
WormJan 2012-10-11
  • 打赏
  • 举报
回复
谢谢楼上的回复。
这段代码把[abc]之外的字符都删除了。
helloyou0 2012-10-11
  • 打赏
  • 举报
回复
如果没有嵌套:
preg_replace_callback( '~\[abc\](.*?)\[/abc\]~msi',
function($matches){
return str_replace(array("\r","\n"),'',$matches[0]);
},
$text);

21,894

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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