-1
下面的代碼Perl可選?停止變量捕獲
my $regex = '^.*?"blocked"\s+:\s+true.*?"clientip"\s+:\s+"([^"]*)".*?"containsadverts" : false.*?"destdomain" :\s+"([^"]*).*?("username" :\s+{ ")?([^"]*)?.*$';
的(相當大的)字符串匹配它有時會:
"username" : { "John" : [ ] } }
有時不是。當它發生時,我需要獲取名爲$ 4的名字(在這種情況下爲John)。 我的想法是創建兩個捕獲組,然後添加?在每個結束時使它們成爲可選項。
這導致:
Use of uninitialized value $3 in concatenation (.) or string at perl_regex.pl line 13.
當我刪除了?
在每年年底捕捉這將捕捉到的變量確定,但在「用戶名」不存在正則表達式失敗。我在想,?
正在做一些我可能不太瞭解的事情?
該錯誤不是來自該行代碼。這實際上是不可能的,因爲單引號字符串不會插入變量。 – TLP
'perldoc perlre' ...考慮對複雜正則表達式使用'// x'修飾符 – toolic
另外,當然,這不是*正則表達式,它是一個字符串。雖然它是單引號的,但它不會像正則表達式那樣行事,並且是潛在的難以發現錯誤的來源。你應該使用'qr()'來存儲一個正則表達式。當然,正如mpapec所說,如果這是JSON,你應該使用JSON模塊解析它,絕對*不*使用正則表達式。 – TLP