为了账号安全,请及时绑定邮箱和手机立即绑定

我的正则表达式匹配太多了。我怎么让它停下来?

我的正则表达式匹配太多了。我怎么让它停下来?

烙印99 2019-05-21 14:01:03
我的正则表达式匹配太多了。我怎么让它停下来?J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM J0000010: Project name: E:\foo.pf J0000011: Job name: MBiek Direct Mail TestJ0000020: Document 1 - Completed successfully我有这个巨大的丑陋的字符串,我正在尝试使用正则表达式从中提取片段。在这种情况下,我想抓住“项目名称”之后的所有内容,直到它说“J0000011:”的部分(每次11将是一个不同的数字)。这是我一直在玩的正则表达式Project name:\s+(.*)\s+J[0-9]{7}:问题是它不会停止,直到它碰到J0000020:最后。如何在第一次出现J [0-9] {7}时使正则表达式停止?
查看完整描述

5 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

在这里使用非贪婪量词可能是最好的解决方案,也因为它比贪婪的替代方案更有效:贪婪的匹配通常尽可能地(在这里,直到文本的结尾!)然后追溯字符后面的字符尝试匹配之后的部分。

但是,请考虑使用否定字符类:

Project name:\s+(\S*)\s+J[0-9]{7}:

\S 意思是“除了空白之外的所有东西,这正是你想要的。


查看完整回答
反对 回复 2019-05-21
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我还建议你使用“Expresso”试验正则表达式 - 它是一个实用程序,是一个很好的(和免费的)实用程序,用于正则表达式编辑和测试。

它的一个优点是它的UI暴露了很多正则表达式功能,人们不熟悉正则表达式可能并不熟悉,因为它们很容易学习这些新概念。

例如,在使用UI构建正则表达式并选择“*”时,您可以选中“尽可能少”复选框并查看生成的正则表达式,并测试其行为,即使您不熟悉之前的非贪婪表达。

可在其网站下载:http: //www.ultrapico.com/Expresso.htm

快递下载:http: //www.ultrapico.com/ExpressoDownload.htm


查看完整回答
反对 回复 2019-05-21
  • 5 回答
  • 0 关注
  • 1182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信