0

我正在制作与 html 代码中的某些术语最匹配的正则表达式。我在一个迭代过程中这样做,以减少匹配以排除我不想要的东西。所以我制作了一个正则表达式,运行它,然后吐出数据,然后我会查看我的匹配效果如何。例如,如果我正在寻找术语“tema”(提供标准的贸易协会的名称),我可能会注意到它也匹配“站点地图”并以某种方式更改我的正则表达式以排除不需要的项目。

为了使这更容易,我想打印出我的比赛以及一些上下文,比如比赛前后的 20 个字符,而不是整行,以便更容易浏览结果。事实证明,以简单的方式很难做到这一点,令人沮丧。

例如,我认为这会起作用:

$line =~ /(.{,20}tema.{,20})/i;

也就是说,我想匹配关键字前后最多 20 个内容,并将其包含在我打印出来的“上下文”中以供扫描。

但事实并非如此。我在这里错过了什么吗?如果 a{,20} 最多可以匹配 20 个 'a' 字符,为什么 .{,20} 不匹配 20 个 '.' 会匹配吗?

抓着我的头。

4

2 回答 2

1

句法:

  • atom{n}(正好n
  • atom{n,}n个或更多)
  • atom{n,m}( n或更多,但不超过m )

所以,

say $1 if $line =~ /(.{0,20}tema.{0,20})/i;

或者,如果您正在使用/g并且可能会得到重叠匹配:

say "$1$2$3" while $line =~ /(.{0,20})\K(tema)(?=(.{0,20}))/ig;

a{,20}不“最多匹配 20 个a字符。”)

于 2013-07-03T20:48:19.007 回答
0

如何使用m/^(.*)tema(.*)$/then usesubstr或类似方法进行搜索以获取 的最后一个字符$1和第一个 from $2

于 2013-07-03T18:51:37.263 回答