(ab)+之间有什么区别?和(ab)+当我在boost中使用它时:正则表达式?

时间:2015-08-14 09:47:46

标签: regex perl

08-14 14:06:02.755: W/System.err(28798): org.json.JSONException: Value jsonFlickrFeed( of type java.lang.String cannot be converted to JSONObject 08-14 14:06:02.770: W/System.err(28798): at org.json.JSON.typeMismatch(JSON.java:111) 08-14 14:06:02.770: W/System.err(28798): at org.json.JSONObject.<init>(JSONObject.java:159) 08-14 14:06:02.770: W/System.err(28798): at org.json.JSONObject.<init>(JSONObject.java:172) 08-14 14:06:02.770: W/System.err(28798): at org.example.flickrbrowser.GetFlickrJsonData.processResult(GetFlickrJsonData.java:73) 08-14 14:06:02.770: W/System.err(28798): at org.example.flickrbrowser.GetFlickrJsonData$DownloadJsonData.onPostExecute(GetFlickrJsonData.java:105) 08-14 14:06:02.770: W/System.err(28798): at org.example.flickrbrowser.GetFlickrJsonData$DownloadJsonData.onPostExecute(GetFlickrJsonData.java:101) 08-14 14:06:02.770: W/System.err(28798): at android.os.AsyncTask.finish(AsyncTask.java:632) 08-14 14:06:02.770: W/System.err(28798): at android.os.AsyncTask.access$600(AsyncTask.java:177) 08-14 14:06:02.770: W/System.err(28798): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 08-14 14:06:02.770: W/System.err(28798): at android.os.Handler.dispatchMessage(Handler.java:102) 08-14 14:06:02.770: W/System.err(28798): at android.os.Looper.loop(Looper.java:136) 08-14 14:06:02.770: W/System.err(28798): at android.app.ActivityThread.main(ActivityThread.java:5158) 08-14 14:06:02.770: W/System.err(28798): at java.lang.reflect.Method.invokeNative(Native Method) 08-14 14:06:02.770: W/System.err(28798): at java.lang.reflect.Method.invoke(Method.java:515) 08-14 14:06:02.770: W/System.err(28798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 08-14 14:06:02.770: W/System.err(28798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 08-14 14:06:02.770: W/System.err(28798): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 08-14 14:06:02.770: W/System.err(28798): at dalvik.system.NativeStart.main(Native Method) 匹配前一个原子一次或多次,同时消耗尽可能少的输入。

我不明白这一点,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

(ab)+?会尝试匹配至少发生一次的ab,并在找到模式后立即返回,因此懒惰

(ab)+会尝试匹配所有出现的ab至少出现一次然后它会返回,因此它是贪婪

演示:https://regex101.com/r/rC2oB9/1https://regex101.com/r/hP7lM9/1

请注意,在第一次演示中,第一次出现ab匹配(突出显示),而在第二次演示中,所有出现的ab都匹配(突出显示)

注意:重复捕获组只捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置捕获组以捕获所有迭代或使用非捕获组。

请参阅:What do lazy and greedy mean in the context of regular expressions?

答案 1 :(得分:0)

+?是量词。

  • +:匹配1次或更多次,
  • ?:匹配1或0次,

默认情况下,量化的子模式是“贪婪的”,也就是说,它将尽可能多地匹配(给定一个特定的起始位置),同时仍然允许模式的其余部分匹配。如果您希望它与可能的最小次数匹配,请使用“?”跟随量词 请注意,含义不会改变,只是“贪婪”:

+?:匹配1次或更多次,而非贪婪。

有关详细信息,请参阅:Quantifiers