鑑於以下文本格式,如何在括號之間獲取「用戶編號」值?格式相同,但括號內的值從文件到文件不同。Perl:在已知位置解析未知值
User name [michael]
User age [25]
User number [2432]
User city [Memphis]
鑑於以下文本格式,如何在括號之間獲取「用戶編號」值?格式相同,但括號內的值從文件到文件不同。Perl:在已知位置解析未知值
User name [michael]
User age [25]
User number [2432]
User city [Memphis]
解決方案1:捕獲的值
my ($number) = $file_as_string =~ /User number \[(\d+)\]/;
正則表達式匹配的回報僅在列表環境(這就是爲什麼my (...)
,而不是僅僅my ...
)
解決方案2:
my $number;
$file_as_string =~ /User number \[(\d+)\]/
and $number = $1;
它還保存在特殊變量$ 1,$ 2等中捕獲,但要小心:如果匹配不成功,則從先前的成功中剩下1美元的值完全匹配可能潛入您的變量(因此and
- $ number將undef除非字符串匹配)。
只提取用戶數,你可以這樣做:
/User number \[(\d*)\]/
現在數量將第一個捕獲組(由括號()
定義)中找到。因爲它們是正則表達式中的特殊字符,表示字符類,所以轉義[
和]
非常重要。
my user_number = $ file_as_string =〜/用戶號碼\ [(\ d +)\] /;我希望這會返回'用戶號碼[2432]',但它返回一個長整數,並弄亂$ file_as_string。第一次使用Perl,我正在編輯另一個人的腳本,所以我確信這很簡單,我只是犯了一個初學者的錯誤。 –
這實際上很接近。你只是忘了包含'['和']'(看我的答案)。正則表達式匹配每個字符,並且您的正則表達式告訴正則表達式引擎它在「用戶編號」之後的空格之後期望數字**右**。 –