如何在正则表达式perl中匹配一次

Tre*_*ree 1 regex perl split

$line = " TEST: asdas :asd asdasad s";

if ($line =~ /(.*):(.*)/
{
  print "$1  = $2 "
}
Run Code Online (Sandbox Code Playgroud)

我在期待 TEST =asdas :asd asdasad s

但它不起作用?什么是问题

And*_*ter 12

正确的方法是:

/([^:]+):(.*)/
Run Code Online (Sandbox Code Playgroud)

要么

/(.+?):(.*)/
Run Code Online (Sandbox Code Playgroud)

这样,你不匹配左边的"任何东西",你在第一个例子中匹配"一个或多个非冒号字符",或者"匹配任何字符后跟冒号的最短字符串"第二.

更好的方法是不使用正则表达式.使用split.

my ($left, $right) = split(/:/, $line, 2);
Run Code Online (Sandbox Code Playgroud)

,2说:"我想最多两个领域".

  • 你不必*都*使左边的部分非贪婪*和*只匹配非冒号,任何一个就足够了. (2认同)