我有一个像c.{0,2}?m和一个字符串的表达式"abcemtcmncefmf".目前,它会与3个字符串:cem,cm和cefm(见这里).但在这种情况下,我喜欢只匹配其中最小的一个cm.
我的问题是我没有全局匹配支持,只有第一个匹配,因为我正在使用MariaDB REGEXP_SUBSTR()功能.我当前的解决方案是我创建的存储过程来解决我的问题.但它比简单情况下的正则表达式慢10倍.
我也试过做类似的事情(cm|c.{0,1}?m|c.{0,2}?m),但它没有用,因为它会匹配任何组模式中的第一个,而不是在所有主题字符串中逐个尝试.
我知道正则表达式(PCRE)有一些黑魔法功能,但我没有找到解决我问题的方法.
.{0,2}?在我当前的模式上使用非贪婪模式();您可以简单地在分支重置组中使用交替:
/^(?|.*(cm)|.*(c.m)|.*(c..m))/s
(结果在第1组)
或者像这样:
/^.*\Kcm|^.*\Kc.m|^.*\Kc..m/s
第一个成功的分支获胜。
| 归档时间: | 
 | 
| 查看次数: | 1563 次 | 
| 最近记录: |