2010-10-04 598 views
2

我需要从RSS提要中删除一些数据。正则表达式匹配冒号前的所有内容?

它出现之前的一切一,也最好,只是后出现的空间

例子:

您好:查理想知道如何删除他后面的一切从冒号后面和前面的一个空间。我会一直有这个问号?

凡:和Hello会匹配,但不是“查理说你好”

感谢所有谁拥有这个美好的知识,需要时间来回答。

+0

我看到大胆。内容HTML? – 2010-10-04 19:47:14

+0

当你说“一切之前的一切:”时,你是指* *之前的所有内容,或者是最后一个? – 2010-10-04 20:45:21

回答

2

试试这个:

^[^:]+:\s? 

尾随\s?将匹配冒号后面的空间,但并不需要它。

我同意@gpojd;如果有效载荷中有冒号,则应使用否定字符类来避免贪婪问题。

+1

为什么'\ s?' - '.'会匹配空格(不是换行符)。 – 2010-10-04 19:44:45

+0

@lasseepeholt,你是对的。我更新了。 – Brad 2010-10-04 19:47:41

1

你可以使用: ^.*:

这符合:

Hello :查理想知道如何从结肠,并在前面有一个空格后面删除他后面的一切。我会一直有这个问号?

0

类似^.*: *应该很好。这匹配从排队的开始到冒号以及之后的任何空格。

+0

真棒你是男人!非常感谢你。 – Mark 2010-10-04 19:50:33

5

使用

^[^:]+:\s* 

,而不是

^.+:\s* 

这是它的工作的例子:

perl -le 'my $string = q{Foo : bar baz}; $string =~ s{^[^:]+:\s*}{}; print $string;' 

我建议在第二个是第一个以避免贪婪的问题:

perl -le 'my $string = q{Foo : bar: baz}; $string =~ s{^[^:]+:\s*}{}; print $string;' 

看看我所提到的贪婪问题:

perl -le 'my $string = q{Foo : bar baz}; $string =~ s{^.+:\s*}{}; print $string;' 
perl -le 'my $string = q{Foo : bar: baz}; $string =~ s{^.+:\s*}{}; print $string;' 
相关问题