我很難弄清楚為什么我會得到標題中定義的錯誤。
這是我在命令列中輸入的一行代碼:
perl -pi -e 's/(/(?:(?:https?|ftp|file)://|www.|ftp.)' myfilepath
基本上,我想做的是通過一個文本體,找到所有的URLS并在域名的末尾附加一些東西。比如說。 https://thisisalink.com/navigate/page <--我想忽略掉 ]
當我運行這段代碼時,我一直得到這樣的錯誤:
。
在regex中不匹配的[;由<-- 這里在*)|[<-- 這里A-Z0-9 &@#%=~_|5.030003)/gxi)/在-e第1行,<> 第1行。
如何解決這個問題?
uj5u.com熱心網友回復:
$]是一個特殊變數,包含了當前使用的Perl解釋器的版本。因此,[A-Z0 9 &@#%=~_|$]被插值為[A-Z0 9 &@#%=~_|5.032001(在我的Perl 5.32.1上),而開頭的[因此不匹配。要解決這個問題,可以用$來轉義$:
[A-Z0 9 &@#%=~_|$]
類似地,在regex的前面,你正在使用[...$?...],除了$?也是一個特殊變數,包含由最后一個管道關閉、回撥(``)命令、成功呼叫wait() 或 waitpid() 或從 system() 運算子回傳的狀況。這不會引起任何錯誤,因為它應該是一個整數,但它不會像你希望的那樣與$或?匹配。再次,使用$來轉義$?,
一般來說,當你想匹配一個字面的$時,你應該轉義它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311359.html
標籤:
