Perl替代问题

时间:2014-04-26 22:14:35

标签: regex perl substitution

我试图在&gt;之后替换任何空格除了</a>之后的空格。如何使用Perl替换运算符执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:5)

要删除除>之外的</a>之后的空格,您可以使用此选项:

$subject =~ s%(?<!</a)>\s*%>%mg;

它是如何运作的?

  1. %是正则表达式的分隔符。他们不参加比赛。
  2. (?<!</a)是一个负面的后瞻,断言“在字符串中的这个位置,我背后的东西不是</a”。
  3. 断言后,我们匹配>和空格字符。
  4. 因此,我们匹配了一个>字符串但不是错误字符串。

    %>%表示的替换只是>,允许我们摆脱空白字符。

答案 1 :(得分:1)

这应该为您完成,因为它只会替换>而不是</a>

之后的空格
(?<=\>)(?<!\<\/a\>)[[:space:]]

<强> REGEX101

<强> PERL:

use strict;
use warnings;

while (<DATA>) {
        $_ =~ s/(?<=\>)(?<!\<\/a\>)[[:space:]]/REPLACEMENT/gm;
        print $_;
}

__DATA__
> 
> Test
</a> TEST
<s m> TEST

<强>输出:

>REPLACEMENT
>REPLACEMENTTest
</a> TEST
<s m>REPLACEMENTTEST