如何在 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 ) ...
我正在尝试使用正则表达式在第 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
$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 ) ...