我有两个不同长度的字符串
chriscattano
christiancattano
我的子串长度为3到10,两个字符串共享
(chr)(hri)(ris)(cat)(att)(tta)(tan)(ano)(chri)(hris)(catt)(atta)(ttan)(tano)(chris)(catta)(attan)(ttano)(cattan)(attano)(cattano)
我正在尝试将这些内容放入正则表达式搜索中,以便成功匹配单词chris
和cattano
,以便我可以执行.replace
并应用<span>
比赛结果的sass课程。
如果我将我的正则表达式格式化为:
/(chr)|(hri)|(ris)|(cat)|(att)|(tta)|(tan)|(ano)|(chri)|(hris)|(catt)|(atta)|(ttan)|(tano)|(chris)|(catta)|(attan)|(ttano)|(cattan)|(attano)|(cattano)/g
我设法在chr
和cattan
上相互匹配,但我无法弄清楚如何突出显示chris
和cattano
;我错过了is
和o
。
这个例子可以彻底改变,因为我只使用我的名字来测试和完善功能。它最终将用于电子邮件地址,名称和地址。因此,改变捕获组的顺序(如果可以解决这个问题)不是一个解决方案,当它变得更加动态时,我将无法控制捕获组在放入正则表达式对象时的顺序,并且作为参数提供给.replace()
方法。
这是一个regexpal,我一直在尝试各种各样的事情,以突出我需要的匹配。希望有人可能能够修补它吗?
答案 0 :(得分:1)
您需要按照降序排列数组中的项目,以确保首先测试最长的替代项,然后将它们加入到 (def a (atom {:id {:counter 0}}))
(defn upvote [id]
(swap! a assoc-in [(keyword id) :counter] (inc (get-in @a [(keyword id) :counter])))
)
(dotimes [i 10] (.start (Thread. (fn [] (upvote "id")))))
(Thread/sleep 12000)
(prn @a)
的模式中。
这是因为在像JS或大多数其他NFA正则表达式中找到的第一个替代方案使得正则表达式引擎停止处理该组。您可以在Remember That The Regex Engine Is Eager中了解更多相关信息。