如何在 Perl 中使用正则表达式匹配字符串中第 n 个索引处的 character/letter/symbol/digit

How to match character/letter/symbol/digit at nth index in a string using regex in Perl

我正在尝试使用正则表达式在第 n 个索引处匹配字符串的 character/letter/symbol/digit。

我的字符串是服务器名称,可以是这样的 10 - 11 个字符的字符串。

$string = gfoobar9gac 即在 9g 之后它可以是任何东西它可以是 10 个字符或 11

我尝试了以下选项

   if ("$string" =~ m/\w[8]g/i){
      print "worked.\n";
   } else {
      print "Not worked\n";
   } 

m/\w[8]g/i - 不起作用
m/g*.1g.*/i - 有效,但如果字符串包含另一个 9g (gfoobar9g9g) 它不起作用,更具体地说,我只需要索引 8
处的 g /9g/ - 这个也失败了,因为字符串中可能有 2 个 9g。

有人可以仅使用正则表达式提出其他建议吗?

谢谢,

指定 matching repetitions 个数的语法是 {}

所以要检查 g 是否是 $string

中的第 9 个字符
$string =~ /^\w{8}g/

这假定了一个限制,即 g 前面是“word”字符,由 \w 匹配。要匹配 any 字符,请使用模式 .。锚点是必需的,因为如果没有它,您只需检查 g 前面是否有 8 个单词字符,无论它在字符串中的任何位置。

为了捕获一个未知的第 9 个字符

my ($char) = $string =~ /^\w{8}(.)/;

($char) 中的括号需要在匹配运算符上强加一个列表上下文,以便它 returns 实际匹配(在本例中为一个),而不仅仅是 true/false。

然后检查$char是否在$string

中的第$n个位置
$n_prev_chars = $n - 1;

if ( /$string =~ /^\w{$n_prev_chars}$char/ ) ...

我不知道为什么只限制正则表达式,但让我也说明一个基于 substr 的基本方法

if ( substr($string, $n, 1) eq $char ) ...