regex - 如何修复我的正则表达式以使其与贪婪的量词不匹配?

标签 regex perl parsing greedy regex-greedy

这个问题在这里已经有了答案:





My regex is matching too much. How do I make it stop? [duplicate]

(5 个回答)


2年前关闭。




我有以下几行:

"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;(.*?);(.*?);(.*?);(.*)

关于regex - 如何修复我的正则表达式以使其与贪婪的量词不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/255815/

相关文章:

python - 如何使用正则表达式检测字符串中的符号?

regex - 重用分支重置组并不匹配所有替代方案

python - 从文件名中提取单词列表

python - 计算两个字符串之间的单词数python regexp

c - 调用 "atoi"函数后,代码导致段错误

bash - 如何在 Perl 中使用 Shell 参数扩展?

perl - 如何升级从 CPAN 安装的 perl 模块?

mysql - 如何向我的 MySQL 数据库中插入 100 万个条目?

java - 使用 Java 修改 XML 中的一些字段的最佳方法是什么

c# - "8"的 int.Parse 失败。 int.Parse 总是需要 CultureInfo.InvariantCulture?