Perl正则表达式,异常

时间:2016-06-30 13:43:42

标签: regex perl

例如,我有字符串"域"," asset44.domain"," asset.domain"," domain1"

我需要与正则表达式匹配所有字符串,其中" domain"一句话,但有一些例外:我不需要匹配" asset44.domain"和" domain1"。

首先我做了if ($_ =~ /domain/io) { 它匹配所有字符串

我放if ($_ =~ /domain(?!1)/io) {后 它匹配所有字符串,除了" domain1"

现在,我无法理解,除了" asset44.domain",但保持匹配" asset.domain"。

P.S。 asset44.domain可能还有另一个数字:例如asster56.domain。

P.P.S 解决方案: (?<!asset)(?<!\d\.)domain(?!1) https://regex101.com/r/sF2qG3/1

3 个答案:

答案 0 :(得分:2)

只是一些想法:

if ( $_ =~ /domain/ and (not $_ =~ /domain1/ or $_ =~ /asset44/) ){
   # do whatever
}

更新:

 [^asset[0-9]domain[^domain1]

以下是演示:regex101.com/r/rJ4vC6/1

答案 1 :(得分:0)

尝试使用:

^([a-zA-Z]+\.)?domain$

我们将可选子域与([a-zA-Z]+\.)?匹配 和字符串domain,后面没有任何内容

直播here

答案 2 :(得分:0)

好的,我发现如何做得更好,这是我的代码。

(?<!asset)(?<!\d\.)domain(?!1)

https://regex101.com/r/sF2qG3/1

适合所有人的Thx。