正则表达式在卷曲括号内找到一个词

时间:2016-02-05 16:16:48

标签: regex textmate oniguruma

我需要一种方法来使用RegEx搜索文本并在Latex命令中找到一个单词(这意味着它在花括号内)

以下是示例:

Tarzan is my name and everyone knows that {Tarzan loves Jane}

现在,如果您搜索正则表达式:({[^{}]*?)(Tarzan)([^}]*})并将其替换为$1T~a~r~z~a~n$3

这将仅替换花括号内的单词Tarzan而忽略其他实例!这就是我来的。

现在我需要的是用以下示例做同样的事情:

Tarzan is my name and everyone knows that {Tarzan loves Jane} but she doesn't know that because its written with \grk{Tarzan loves Jane}

在这个例子中,我只需要最后一次提及" Tarzan"要替换(\ grk {}中的那个)

有人可以帮我修改上面的RegEx搜索只做那个吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用此模式:

(?:\G(?!\A)|\\grk{)[^}]*?\KTarzan

demo

细节:

(?:
    \G(?!\A)  # contiguous to a previous match
  |           # OR
    \\grk{    # first match
)
[^}]*?        # all that is not a } (non-greedy) until ...
\K            # reset the start of the match at this position
Tarzan        # ... the target word

注意:\G匹配上一个匹配后的位置,但它也匹配字符串的开头。这就是我添加(?!\A)以防止在字符串开头匹配。

或者您可以使用:\\grk{[^}]*?\KTarzan多次通过。