繁体   English   中英

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

[英]Can I use condition in regular expression in 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;

任何想法将不胜感激。

使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM