如何创建Perl正则表达式以删除第一个“<”之前的所有字符?

时间:2009-10-06 15:18:48

标签: regex perl

我目前有这个:tr/[.]+(?=<)//d,它应该删除所有字符(由[.]+表示)直到第一个"<",因为我使用了积极的前瞻。但出于某种原因,它会从字符串中删除所有".""<"

对于记录,我没有使用正则表达式处理HTML或XML。

5 个答案:

答案 0 :(得分:6)

当在[]中用作字符类时,字符的含义会发生变化。 [。]没有意义,真的,不同于。所以 。在这种背景下按字面解释。

我认为这应该可以正常工作:

$text =~ s/^.*?</</s; 

答案 1 :(得分:6)

您不希望tr

#!/usr/bin/perl

use strict;
use warnings;

while ( <DATA> ) {
    last unless /\S/;
    s/^.+?</</;
    print;
}

__DATA__
a < b < c
a < b < c

答案 2 :(得分:3)

^[^<]+
字符类中的

.(点)是一个文字点,而不是通配符。

答案 3 :(得分:3)

'。'在字符类中不是元字符。您还需要s///,而不是tr,它会替换单个字符。所以s/^.+(?=<)//应该有效,尽管我个人会写 s{^.*<}{<},以避免前瞻性的事情。

答案 4 :(得分:1)

编辑澄清:

if ($line =~ /^.+?<(.+)/) {
  push @matched, $1;
}