【发布时间】:2014-12-22 18:13:39
【问题描述】:
我有这样的字符串:
\24s904dS\24sr4d2\24x\\y\\12z:234F\\3dRl\24o980\24
我只想匹配粗体部分:
x\\y\\12z:234F\\3dRl
我可以用这个正则表达式来处理不贪心的部分:
\\24(.*:.*?)\\24
但仍然不知道如何处理左部分的非贪婪。
【问题讨论】:
标签: regex non-greedy
我有这样的字符串:
\24s904dS\24sr4d2\24x\\y\\12z:234F\\3dRl\24o980\24
我只想匹配粗体部分:
x\\y\\12z:234F\\3dRl
我可以用这个正则表达式来处理不贪心的部分:
\\24(.*:.*?)\\24
但仍然不知道如何处理左部分的非贪婪。
【问题讨论】:
标签: regex non-greedy
如下修改你的模式
.*\\24(.*:.*?)\\24
【讨论】:
您可以使用这个基于负前瞻的正则表达式:
\\24((?:.(?!\\24))*:.*?)\\24
重要的部分是这个基于前瞻的正则表达式模式(?:.(?!\\24))*,这意味着如果不遵循\24,则匹配一个字符。这基本上确保了最相邻的左侧 \24 匹配。
输出匹配:
x\\y\\12z:234F\\3dRl
【讨论】:
?: 实际上是一个非捕获组。
\24 包围的匹配项,但不能在其他方法中捕获。
与其修改贪心,不如只写一个更精确的正则表达式:
\\24([a-zA-Z0-9]+:[a-zA-Z0-9]+)\\24
(相对而言,非贪婪修饰符确实是解决问题的最佳方法。)
【讨论】: