正在寻找时间的正则表达式不希望非贪婪

时间:2015-06-04 16:12:44

标签: regex quantifiers non-greedy spiceworks

我正在尝试在Spiceworks中运行一个正则表达式来解析电子邮件标题,以选择第一个用于分配票证的时间实例。 正则表达式本身有效,但它会捕获所有时间实例,而不只是一个。

这是正则表达式:\.*(0[1]|1[3-7]):\d\d:\d\d

我试图通过这样做而非贪婪:\.*?(0[1]|1[3-7]):\d\d:\d\d 但这似乎不起作用。将问号放在量词前面并没有为此目的做任何事情。

使这个正则表达式非贪婪或只接收第一个实例的好方法是什么?

谢谢,

Andrew N。

编辑:我正在尝试从正则表达式中实现的是“13:04:57”,而不是整个日期。

示例字符串: 收到:127.0.0.1,SMTP id为co5csp22954317qdb; 2015年5月6日星期三13:02:22 -0700(PDT)X-Received:127.0.0.1,SMTP id为j185mr26699743oig.68.1430928141923; 2015年5月6日星期三13:02:21 -0700(太平洋时间)

2 个答案:

答案 0 :(得分:1)

您可以使用这个基于前瞻性的正则表达式来匹配正则表达式匹配的时间的第一个实例:

java.lang.NullPointerException
       at android.graphics.drawable.LayerDrawable$LayerState.(LayerDrawable.java:625)
       at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:107)
       at android.graphics.drawable.LayerDrawable.(LayerDrawable.java:99)
       at android.graphics.drawable.LayerDrawable$LayerState.newDrawable(LayerDrawable.java:655)
       at android.content.res.Resources.getCachedDrawable(Resources.java:2052)
       at android.content.res.Resources.loadDrawable(Resources.java:1943)
       at android.content.res.Resources.getDrawable(Resources.java:707)
       at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
       at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:126)
       at android.support.v7.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:422)
       at android.support.v7.internal.view.menu.ActionMenuItemView.initialize(ActionMenuItemView.java:120)
       at android.support.v7.widget.ActionMenuPresenter.bindItemView(ActionMenuPresenter.java:184)
       at android.support.v7.internal.view.menu.BaseMenuPresenter.getItemView(BaseMenuPresenter.java:182)
       at android.support.v7.widget.ActionMenuPresenter.getItemView(ActionMenuPresenter.java:170)
       at android.support.v7.widget.ActionMenuPresenter.flagActionItems(ActionMenuPresenter.java:458)
       at android.support.v7.internal.view.menu.MenuBuilder.flagActionItems(MenuBuilder.java:1129)
       at android.support.v7.internal.view.menu.BaseMenuPresenter.updateMenuView(BaseMenuPresenter.java:91)
       at android.support.v7.widget.ActionMenuPresenter.updateMenuView(ActionMenuPresenter.java:207)
       at android.support.v7.internal.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.java:279)
       at android.support.v7.internal.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.java:1021)
       at android.support.v7.internal.view.menu.MenuBuilder.startDispatchingItemsChanged(MenuBuilder.java:1044)
       at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:463)
       at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:68)
       at android.os.Handler.handleCallback(Handler.java:605)
       at android.os.Handler.dispatchMessage(Handler.java:92)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4517)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
       at dalvik.system.NativeStart.main(NativeStart.java)

/^(?:(?!(?:0[1]|1[3-7]):\d\d:\d\d).)*((?:0[1]|1[3-7]):\d\d:\d\d)/m 是一个负向预测,它确保在匹配时间之前没有其他时间实例,因此只匹配第一个实例。

RegEx Demo

答案 1 :(得分:0)

{1}与之前的模式1次匹配。如果您发布样本标题,我可以测试REGEX以确保我得到的一切正确。请尝试以下方法。

(.*(0[1]|1[3-7]):\d\d:\d\d){1}