现在有这么一段字符串:
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(换行符好像不一样),就更完美了。弄了一晚上,请教了群友,仍然没有解决,只好来麻烦大家了。
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(换行符好像不一样),就更完美了。弄了一晚上,请教了群友,仍然没有解决,只好来麻烦大家了。
preg_replace_callback( '~\[abc\](.*?)\[/abc\]~msi',
function($matches){
return str_replace(array("\r","\n"),'',$matches[0]);
},
$text);
这段代码把[abc]之外的字符都删除了。
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] 是两段
那行代码用的修正符e就是可以对匹配项再编辑是吧?昨晚想一次性把[abc]里的东西替换呢,结果没弄出来。呵呵。
这时 preg_replace_callback 的威力就显现出来了
感谢各位高手的解答。