我正在制作符合html代码中最佳匹配条件的正则表达式。我在迭代过程中这样做,以减少匹配以排除我不想要的东西。因此,我制作了一个正则表达式,运行它,并吐出数据,然后我查看,看看我的匹配是如何运作的。例如,如果我正在寻找术语“tema”(提供标准的行业协会的名称),我可能会注意到它也匹配“sitemap”并以某种方式改变我的正则表达式以排除不需要的项目。
为了使这更容易,我想打印出我的匹配以及一些上下文,比如比赛前后的20个字符,而不是整行,以便更容易扫描结果。事实证明,这很难以简单的方式实现。
例如,我认为这样可行:
$line =~ /(.{,20}tema.{,20})/i;
也就是说,我希望在关键字之前和之后匹配最多20个,并将其包含在我打印出来的“上下文”中进行扫描。
但事实并非如此。我在这里错过了什么吗?如果{,20}最多匹配20个字符,那么为什么不会。{,20}匹配任何'。'的20个字符。会匹配吗?
抓我的头。
答案 0 :(得分: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
个字符。”)
答案 1 :(得分:0)
如何使用m/^(.*)tema(.*)$/
进行搜索,然后使用substr
或类似内容获取$1
的最后一个字符,以及$2
中的第一个字符。