PHP - 正则表达式 - preg_replace - 换行后的空格!

3

仍然在学习正则表达式!我想学会它,但我仍然在用键盘撞头!;-)

对你来说可能很简单,我相信!

假设我有这个字符串,\s 是实际空格的位置... \n 是换行符的位置...

编辑:

   OTHERFIELD: Other text here...`\n`
   DESCRIPTION: The quick brown fox jum`\s\n`
   `\s`ps over the lazy dog
   OTHERFIELD: Other text here...`\n`

仅供说明:

每行始终以大写字母开头,后跟冒号!

因此,我分割每行的唯一方法是通过它的最后一个\n,因此我无法删除它!

然后,我使用这个正则表达式对每个清理过的行进行preg_split:

/$\R?[^A-Z:]*/m

给我一个像这样的数组:

[DESCRIPTION] => The quick brown fox jumps over the lazy dog

现在,我需要做的是删除 A-Z: 后面的所有空格。
我通过这个正则表达式实现了这个目标:/\s+(?![A-Z:])/m,它会产生以下结果。
DESCRIPTION: The quick brown fox jum ps over the lazy dog

你可以看到它在jumps之间留下了空格。

如何获得这样的结果?

DESCRIPTION: The quick brown fox jumps over the lazy dog

感谢您的时间!

你能写出一些实际的代码吗?我不太理解你在正则表达式中做了什么。我也不明白你的目标是什么。A-Z表示只有大写字母,而你正在使用负向先行断言表达式? - Zan Lynx
好的,让我做一下,只需要一秒钟。 - Luca Filosofi
我尝试解释,希望这有意义! - Luca Filosofi
1个回答

2

尝试使用这个正则表达式:

/\s+\n\s+/

只有在空格字符围绕换行符时才会匹配。您可能需要调整量词以适应实际数据。


我认为他可能需要使用/s修饰符(将字符串视为单行)才能使其正常工作。 - Zan Lynx
感谢您的回复,Gumbo。我尝试了您提供的正则表达式,但不幸的是它没有起作用。我已经更新了我的问题,以便更好地解释! - Luca Filosofi
1
为什么这个不起作用?你需要在将文本分成行之前,就在最开始应用这个正则表达式。 - serg
@Zan Lynx:s 修改符仅使 . 还匹配换行符。因此 /.*/ 仅匹配单行,而 /.*/s 则匹配所有行。 - Gumbo
我使用以下代码删除每行开头的空格:$sql = preg_replace('/\n\s+/', "\n", $sql); 谢谢! - Bram Verstraten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接