我目前有这个:tr/[.]+(?=<)//d
,它应该删除所有字符(由[.]+
表示)直到第一个"<"
,因为我使用了积极的前瞻。但出于某种原因,它会从字符串中删除所有"."
和"<"
。
对于记录,我没有使用正则表达式处理HTML或XML。
答案 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;
}