正则表达式去除换行和空格

5

我创建了一个正则表达式来去除空格、制表符、换行等。

(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+

我的问题是它只匹配了一些空格和换行,而非全部。为什么会这样呢?

我尝试过:

(^[\r\n]*|[\r\n]+)[\s\t+]*[\r\n]+

但仍然似乎不能匹配多个空格
正则表达式测试演示

使用g标志。另一个[\n\s\r]+ - Tushar
1
你的雷鬼音乐在哪里可以听到? - Christian Stewart
@ChristianStewart Safari 上的自动纠正哈哈 - user4756836
@Tushar 也许应该在其中包含 \t 吗? - user4756836
1
\s代表空白字符,具体包括哪些字符取决于正则表达式的类型。在本教程中讨论的所有类型中,它包括 [ \t\r\n\f]。也就是说:\s匹配空格、制表符、换行符或换页符。” - Tushar
尝试使用 '~^\s+~m' - Wiktor Stribiżew
4个回答

1
我不太确定您想要在这里实现什么。但是,如果您像问题中所述,只需使用替换\s为空即可。请参见regex101。(为了清晰起见,用*进行替换)
除了过于复杂外,您的正则表达式的问题在于结尾的[\r\n]+需要CR/LF,如果该行不是由空行(^[\r\n]匹配以换行符开头的行——即空行)前导的,则第一个[\r\n]+也需要CR/LF。
简而言之,它永远不会匹配两个连续的非空行。
问候。

那么我在正则表达式中需要做哪些更改? - user4756836
正如第一段所提到的,你应该使用的是简单的\s。请查看Tushar对你问题的评论。 - SamWhan
但似乎无法匹配换行符。 - user4756836
你需要使用单行修饰符s(在PHP中是PCRE_DOTALL). - SamWhan

1
尝试以下操作:
将空格替换为.replace(/\s+/g, "") 将换行符替换为.replace(/\n+/g, "") 添加全局修饰符可在整个文本中进行替换。

0

这将去除空格:

^(?:\s*)(\w+)$  

使用多行和全局修饰符(gm)

如果这解决了您的问题,请将问题标记为已解决。


-1
$input_lines = <<<EOD


test

aeee
eeeee
EOD;


$output = preg_replace('/(\s)*/', '$1', $input_lines);
var_dump($output);

结果:

string(16) "
test
aeee
eeeee"

如果我想要删除所有换行符

$output = preg_replace('/(\s)*/', '', $input_lines);
var_dump($output);

结果:

string(13) "testaeeeeeeee"

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