【发布时间】:2016-08-26 01:53:08
【问题描述】:
这是一个有效的正则表达式:
/(ANSI|AAMVA) (\d{6})(\d{2})(\d{2})(\d{0,2})((?:DL)|(?:ID))+(.*?)\g{-2}+([^"]+)/
这是一个示例字符串:
"@\n\nANSI 6334290212DL00389199ZO04420478DLDAQ3572928\nDAASMITH, JOHN DOE\nDAG\nDAL4389 NE 47TH AVE\nDAIASHLAND\nDAJOR\nDAK97555 \nDARC \nDASD \nDATM \nDAU504\nDAW180\nDBA12201212\nDBB19780303\n"
我正在尝试匹配分隔符,DL 或 ID,它可能会再次出现在字符串中。
我想匹配之前匹配的DL 或ID。
问题是,如果我使用 ? 来完成此操作,它就会停止贪婪并更喜欢 0 个匹配项。
我很难过,我是否缺少? 运作方式的基本知识?
编辑:问题不在于提取 JSON 数据,而是解析 msg 位,使用 JSON 没有做任何事情来完成此任务。我将字符串修剪到相关的部分。
@hobbs 的修复有效,因为它让我将 ? 更改为 + 并且仍然不匹配,如果没有任何内容。
有效! :)
/(ANSI|AAMVA) (\d{6})(\d{2})(\d{2})(\d{0,2})((?:DL)|(?:ID))+(.*?)(?:\g{-2}|(?="))+([^"]+)/
【问题讨论】:
-
欢迎来到 Stack Overlow。您的格式很难阅读。您能否编辑您的问题以包含您尝试解决的实际问题的干净示例?
-
ID不会出现在您的示例数据中的任何位置。你真正想做什么? -
大部分字符串是不相关的。修剪它,显示你得到的输出,并显示你想要的输出。
-
您的示例字符串看起来非常像 JSON。为什么不将其解析为 JSON?
-
ID 出现在不同的数据中,这就是驾照 (DL) 或 ID 背面的条形码所包含的内容。有很多奇怪的状态和一系列添加有趣边缘情况的版本。
标签: regex perl regex-greedy