Regex 正则表达式在花括号中查找单词

Regex 正则表达式在花括号中查找单词,regex,textmate,oniguruma,Regex,Textmate,Oniguruma,我需要一种使用正则表达式搜索文本的方法,并在Latex命令中找到一个单词(这意味着它在大括号中) 以下是一个例子: Tarzan is my name and everyone knows that {Tarzan loves Jane} 现在,如果您搜索正则表达式:({[^}]*?)(泰山)([^}]*}),并将其替换为$1T~a~r~z~a~n$3 这将只替换花括号中的单词泰山,而忽略其他实例!这就是我来的地方 现在我需要的是对以下示例执行相同的操作: Tarzan is my name

我需要一种使用正则表达式搜索文本的方法,并在Latex命令中找到一个单词(这意味着它在大括号中)

以下是一个例子:

Tarzan is my name and everyone knows that {Tarzan loves Jane}
现在,如果您搜索正则表达式:
({[^}]*?)(泰山)([^}]*})
,并将其替换为
$1T~a~r~z~a~n$3

这将只替换花括号中的单词泰山,而忽略其他实例!这就是我来的地方

现在我需要的是对以下示例执行相同的操作:

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}
在这个例子中,我只需要最后一次提到要替换的“泰山”(在\grk{}中的那一个)


有人能帮我修改上面的正则表达式搜索以仅执行此操作吗?

您可以尝试使用此模式:

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

详情:

(?:
    \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
和多个通行证。

您使用什么语言?请注意,如果目标词在同一括号中出现多次,则模式将不起作用。您想替换目标单词的最后一个匹配项还是介于
\grk{…}
之间的匹配项?我不需要任何语言。我将在文本编辑器中使用正则表达式搜索和替换(Mac上的Textmate)。我认为它使用了Oniguruma正则表达式库。在本例中,请为您的问题添加正确的标记。哪个标记是正确的?因为我使用了正则表达式字符串和latex标记,它们对我来说似乎都是正确的,如果在
\grk{…}
中有几个目标词,那么期望的行为是什么?这很有效!难以置信的非常感谢你!你能不能告诉我,我应该在原来的问题下面加上什么标签,这样别人会觉得更容易?