仍处理正则表达式。 我有一个包含行组合的文件。我需要从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;
任何想法都会非常感激。
答案 0 :(得分:2)
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)