Perl正则表达式 – 如何减少贪心?

前端之家收集整理的这篇文章主要介绍了Perl正则表达式 – 如何减少贪心?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何计算以下字符串中空’字段’的数量
空字段用 – |表示或| – |或者| –
我已经煮熟的正则表达式似乎正在工作,除非我有连续的空字段?我如何减少贪心?
  1. my $string = 'P|CHNA|string-string|-|-|25.75|-|2562000|-0.06';
  2. my $count = () = ($string=~/(?:^-\||\|-$|\|-\|)/g);
  3. printf("$count\n");

上面的代码打印2而不是我想要的3.

解决方法

诀窍是使用lookarounds.某人的第一次尝试可能如下:
  1. my $count = () = $string =~ /
  2. (?<\|) # Preceded by "|"
  3. (-)
  4. (?=\|) # Followed by "|"
  5. /xg;

但这不起作用.上述问题是它不检测第一个字段或最后一个字段是否为空.解决这个问题的两种方法

  1. my $count = () = "|$string|" =~ /
  2. (?<\|) # Preceded by "|"
  3. (-)
  4. (?=\|) # Followed by "|"
  5. /xg;

要么

  1. my $count = () = $string =~ /
  2. (?<![^|]) # Not preceded by a char other than "|"
  3. (-)
  4. (?![^|]) # Not followed by a char other than "|"
  5. /xg;

猜你在找的Perl相关文章