逐步修剪白色空间

时间:2016-03-08 19:54:28

标签: regex perl

我是perl和使用正则表达式的新手。我需要从字符串中删除空格。

我找到了一个例子,但它对我来说非常不透明。这是对发生什么的准确描述吗?

sub trim($)
{
  my $string = shift;
  $string =~ s/^\s+//;
  # =~         : regex on variable string
  # s/         : replace match with value
  # ^\s+       : one or more white space characters at beginning
  # //         : no characters

  $string =~ s/\s+$//;
  #  =~        : regex on variable $string
  # s/         : replace match with value
  # \s+$       : one or more white space characters until end of line
  # //         : no characters
  return $string;
}

2 个答案:

答案 0 :(得分:5)

是的。

实际上没什么可说的。

答案 1 :(得分:1)

是的,正如sidyll所回答的那样。您的所有评论都是准确的。由于这些是你要问的基础知识,我想补充一点。

您可以在一个表达式s/^\s+|\s+$//g中执行这两个操作(有一些效率考虑因素)。 请注意,现在您需要/g(" global")修饰符,以便找到所有 \s+。否则,引擎在找到^\s+(如果有的话)后停止,并留下尾随空格(如果有的话)。

为了便于阅读,您可以使用/x修饰符在正则表达式中使用空格。在这种情况下它不是很多,但是对于更复杂的它可以帮助很多。

$string =~ s% ^\s+ | \s+$ %%gx;

您可以使用不同的分隔符 - 只要您不在正则表达式中使用它。我使用上面的%来避免编辑器将所有内容着色为红色(我发现%实际上并不是非常易读,但我需要内部|。这有时非常有用,例如当你的正则表达式有很多/时。然后你可以使用不同的分隔符,这样你就不必逃避它们。

完整资源由评论中的ThisSuitIsBlackNot提供。

我看到人们对此赞不绝口:regex Demo,您可以输入正则表达式,看看它是如何工作的。