我試圖使用正則運算式在第 n 個索引處匹配字串的字符/字母/符號/數字。
我的字串是服務器名稱,可以是像這樣的 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。
有人可以建議僅使用正則運算式的其他內容。
謝謝,
uj5u.com熱心網友回復:
指定匹配重復次數的語法是{}
所以要檢查是否g是第 9 個字符$string
$string =~ /^\w{8}g/
這假定限制g前面是“單詞”字符,匹配\w. 要匹配任何字符,請使用模式.。錨點是必需的,因為沒有它,您只會檢查g前面是否有 8 個單詞字符,無論它在字串中的任何位置。
為了捕獲未知的第 9 個字符
my ($char) = $string =~ /^\w{8}(.)/;
($char)需要括號在匹配運算子上施加串列背景關系,以便它回傳實際匹配項(在這種情況下為一個),而不僅僅是真/假。
然后檢查是否在 a 中$char的$n第 -th 位置$string
$n_prev_chars = $n - 1;
if ( /$string =~ /^\w{$n_prev_chars}$char/ ) ...
我不知道為什么只對正則運算式進行限制,但讓我也說明一個基本的基于substr的方式
if ( substr($string, $n, 1) eq $char ) ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/383283.html
