来自左派的非贪婪正则表达

时间:2014-12-22 18:13:40

标签: regex non-greedy

我有这样的字符串:

  

\ 24s904dS \ 24sr4d2 \ 24的 X \\ÿ\\ 12Z:234F \\ 3dRl \ 24o980 \ 24

我只想匹配粗体部分:

x\\y\\12z:234F\\3dRl

我可以用这个正则表达式来照顾正确的非贪婪:

\\24(.*:.*?)\\24

但仍然无法找到如何处理左派的非贪婪。

3 个答案:

答案 0 :(得分:3)

修改您的模式如下

.*\\24(.*:.*?)\\24

答案 1 :(得分:3)

您可以使用此否定前瞻为基础的正则表达式:

\\24((?:.(?!\\24))*:.*?)\\24

RegEx Demo

重要的部分是这种基于前瞻性的正则表达式模式(?:.(?!\\24))*,这意味着如果不遵循\24则匹配字符。这基本上可以确保最邻近的 \24匹配。

输出匹配:

x\\y\\12z:234F\\3dRl

答案 2 :(得分:2)

不是修改贪婪,而是编写更精确的正则表达式更好:

\\24([a-zA-Z0-9]+:[a-zA-Z0-9]+)\\24

(非贪婪的修饰符确实是解决问题的最佳方法,这种情况相对较少。)