用perl中的regex替换点

时间:2012-08-16 21:19:13

标签: regex perl

我正在使用这个例子:

  

New Zealand cyclist Jack Bauer didn't know it during the Olympic road race, but there was a scantily-clad Kiwi 'snow angel' above him. http://www.stuff.co.nz/sport/olympics/7374497/Near-naked-snow-angel-over-cycle-road-race

我希望在完全停止后添加<br />标记,但不在HTTP链接中添加。就在句子的末尾。

目前我正在使用:

$full_story = $read_story->[0]{story_text}; 
$full_story =~ s/(\D)\.(\D)/<br \/><br \/>/i;

使用此代码会添加<br />,但m中的him将被删除。

最终结果:

New Zealand cyclist Jack Bauer didn't know it during the Olympic road race, but there was a scantily-clad Kiwi 'snow angel' above him.

http://www.stuff.co.nz/sport/olympics/7374497/Near-naked-snow-angel-over-cycle-road-race

我做错了什么?

3 个答案:

答案 0 :(得分:3)

你可以搜索并替换's ///'

给出字符串:

my $string = 'The quick brown fox. Jumps over the lazy dog.';
你可以这样做:

$string =~ s/\./<br \/>/g

's'意味着你正在进行搜索和替换。

在前两个'/ /'之间是你要搜索的那个。在这种情况下,它是一个点(。),但你必须用\来转义它,因为正则表达式中的点是一个外卡。

在下一个'/ /'之间是您要替换的文本。在这种情况下,它是<br />。再次你必须在这里逃避'/',因为它是一个特殊的角色。

最后,末尾的'g'标志表示您在整个字符串中搜索和替换。 所以在我的例子中输出将是:

print $string;
# The quick brown fox<br /> Jumps over the lazy dog<br />

由于您不想替换字符串中的点,您可以简单地将它们分隔在不同的变量中,以便更容易操作。

答案 1 :(得分:0)

$full_story =~ s/(.*?)\.(.*?)/$1<br \/><br \/>$2/i;

答案 2 :(得分:0)

使用index确定字符串第一部分的长度,直至任意http个链接。然后使用substr作为左值来替换该部分中的所有句号。

此代码显示了这个想法。为测试目的,我添加了几个额外的全站点。

use strict;
use warnings;

my $str = q{New Zealand cyclist Jack Bauer. didn't know it during the Olympic. road race, but there was a scantily-clad Kiwi 'snow angel' above him.http://www.stuff.co.nz/sport/olympics/7374497/Near-naked-snow-angel-over-cycle-road-race};

my $index = index lc $str, 'http';
$index = length $str if $index < 0;
substr($str, 0, $index) =~ s|\.|.<br/>\n<br/>\n|g;

print $str;

<强>输出

New Zealand cyclist Jack Bauer.<br/>
<br/>
 didn't know it during the Olympic.<br/>
<br/>
 road race, but there was a scantily-clad Kiwi 'snow angel' above him.<br/>
<br/>
http://www.stuff.co.nz/sport/olympics/7374497/Near-naked-snow-angel-over-cycle-road-race
相关问题