正则表达式在单词之前第一次出现

regex first occurrence before word

我有以下字符串:

:</w:t></w:r>xxxxxxxuyyyyyzzzzz:</w:t></w:r>xxxxuuuxxxyyyyyzzzzzsomemoney

我的目标是删除字符串的标签,找到单词 somemoney 之前的第一个 ':' 像这样

:</w:t></w:r>xxxxuuuxxxyyyyyzzzzzsomemoney

但我只得到这个

:r>xxxxuuuxxxyyyyyzzzzzsomemoney

我正在使用以下表达式

~:(?:.(?!:))+somemoney~

有人可以帮助我,link 测试:https://regex101.com/r/ibfY8s/1

如果您的标签与您的示例一样简单,您可以使用

:(?:<[^>]*>|[^:])*somemoney

这匹配一个冒号后跟两个交替之一,直到 魔术字 。交替是

  1. a 开始 < 后跟任何字符(但 >)直到结束 >,最后是结束 >.
  2. 除冒号外的任何字符 (:)。

交替可以重复任意次数。

第一次交替将 "eat" 标签内容,因此未针对 [^:].

进行测试

Your modified regex101 example.

注意! 如果您的标签可以包含可以包含字符串的参数(例如 HTML-标签),这会变得 very 复杂得多。