2016-02-05 81 views
1

我需要一种方法使用正则表达式来搜索文本,并找到乳胶命令内部的词,多数民众赞成(这意味着它的花括号内)正则表达式查找单词里大括号

这里是例子:

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

如果搜索正则表达式:({[^{}]*?)(Tarzan)([^}]*})$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中的一个{} )

有人可以帮助我修改上面的正则表达式搜索做到这一点吗?

+0

你使用什么语言?请注意,如果目标单词在同一个括号之间出现多次,则您的模式将不起作用。你想替换最后一次出现的目标单词还是'\ grk {.....}'之间的单词? –

+0

我不需要任何语言。我将在文本编辑器(Mac上的Textmate)中使用正则表达式搜索和替换。我认为使用Oniguruma正则表达式库。 – eklisiarh

+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多次通过。

+0

工作正常!难以置信!非常感谢!你能告诉我什么标签应该放在原始问题的下方,以便其他人更容易? – eklisiarh

+0

@eklisiarh:oniguruma和textmate是一个好主意。 –