我可以在Perl中使用正则表达式中的条件吗?

时间:2014-03-17 05:20:07

标签: regex perl

仍处理正则表达式。 我有一个包含行组合的文件。我需要从A到右边拿起所有东西。如果字符A在里面// - 它不计算在内。如果A是该行的第一个字符 - 应该拾取所有内容。将有三种情况:

    my $str = 'some before/some.A;hi99/some after A text goes here'
    my $str1 = 'A some before/some.A;hi99/some after A text goes here'
    my $str2 = 'some before/some.A;hi99/some after

输出应该是:
 文字在这里发  一些之前/ some.A; hi99 /一些文本后来到这里  什么都没有 我可以匹配一个内部//但我不知道是否可以检查正则表达式中的其他两个条件?

  $str =~ /([^\/]+.*[A]+.*[^\/]+)/g;

任何想法都会非常感激。

1 个答案:

答案 0 :(得分:2)

使用splitjoin进行有趣的转换:

use strict;
use warnings;

while (<DATA>) {
    chomp;

    my $odd = 0;
    my $pass = 0;

    my $line = join '/', grep {$pass || (($odd ^= 1) && s/.*?A/A/ && ++$pass)} split '/';

    print $line
        ? "(pass) - $line\n"
        : "(fail)\n";
}

__DATA__
some before/some.A;hi99/some after A text goes here
A some before/some.A;hi99/some after A text goes here
some before/some.A;hi99/some after

输出

(pass) - A text goes here
(pass) - A some before/some.A;hi99/some after A text goes here
(fail)