我有以下几行:
"14:48 say;0ed673079715c343281355c2a1fde843;2;laka;hello ;)"
我使用一个简单的正则表达式来解析它:
if($line =~ /(\d+:\d+)\ssay;(.*);(.*);(.*);(.*)/) {
my($ts, $hash, $pid, $handle, $quote) = ($1, $2, $3, $4, $5);
}
但是;最后把事情搞砸了,我不知道为什么。贪心运算符不应该处理“一切”吗?
贪婪运算符试图获取尽可能多的东西,并且仍然与字符串匹配。发生的情况是第一个(在“say”之后)获取“0ed673079715c343281355c2a1fde843;2”,第二个获取“laka”,第三个找到“hello”,第四个匹配括号。
你需要做的是让除了最后一个之外的所有都变得非贪婪,这样它们就会尽可能少地抓取并仍然匹配字符串:
(\d+:\d+)\ssay;(.*?);(.*?);(.*?);(.*)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)