如何在冒号之前提取字符串?

时间:2019-03-07 05:07:24

标签: regex perl

如何提取冒号之前的字符串。我不要在冒号后面的字符串。

样本输入:

asfmqwdbd/ilcp:dftqclk_rep

所需结果:

asfmqwdbd/ilcp

我的代码:

if (m/^(\S+))
  $inst_name = $1;

3 个答案:

答案 0 :(得分:1)

假设分号(;)是问题中的错字,而您实际上的意思是冒号(:),则这是正确的正则表达式:

  • 行(^开头的锚点
  • 捕获一个或多个非冒号字符(([^:]+)
  • 匹配必须以冒号(:)结尾
#!/usr/bin/perl
use warnings;
use strict;

while (<DATA>) {
    print "$1\n" if /^([^:]+):/;
}

exit 0;

__DATA__
asfmqwdbd/ilcp
asfmqwdbd/ilcp:dftqclk_repasfmq
asfmqwdbd/ilcp;dftqclk_repasfmq

试运行:

$ perl dummy.pl
asfmqwdbd/ilcp

答案 1 :(得分:0)

根据您的问题,您想要这样的输出 “ asfmqwdbd / ilcp” 为此,您可以使用“ ^([\ S] +):”,然后使用$ 1。

答案 2 :(得分:0)

我认为您正在寻找

$ echo "asfmqwdbd/ilcp:dftqclk_repasfmq" | perl -pe 's/(\S+):.*/$1/ '
asfmqwdbd/ilcp

$ perl -le ' $x="asfmqwdbd/ilcp:dftqclk_repasfmq"; $x=~s/(\S+):.*/$1/; print $x '
asfmqwdbd/ilcp

$