如何使用正则表达式进行搜索和替换并在Perl中保留空格?

时间:2015-08-07 14:31:47

标签: regex perl

我正在使用此代码: $text =~ s/\s(\w)/\u$1/g;

但是This is an example

成为ThisIsAnExample

而不是This Is An Example

如何保留空格?

2 个答案:

答案 0 :(得分:2)

使用lookbehind。

$text =~ s/(?<!\S)(\w)/\u$1/g;

或者使用效率更高的\K(Perl 5.10 +)。

$text =~ s/(?:^|\s)\K(\w)/\u$1/g;

这两个解决方案都会确保第一个单词也大写。如果这不是问题,那么第二个解决方案可以简化为以下内容:

$text =~ s/\s\K(\w)/\u$1/g;

答案 1 :(得分:1)

匹配包含空格,替换不包含空格。

$text =~ s/(\s)(\w)/$1\u$2/g;

由于\s包含不同类型的空白字符,如果您想将其保留在替换字符中,则需要将其捕获并放回原位。

另一种方法是使用单词边界和完整的“单词”。

$text =~ s/\b(\w+)\b/\u$1/g;