Vim:正则表达式匹配尖括号内的单词?

时间:2015-02-19 14:12:42

标签: regex vim

我想匹配尖括号内的单词(html标签):

<MatchedWord></MartchedWord>

这是我到目前为止所做的:

/\v\<\w+\>

问题是它与<>/匹配。

如何做到只匹配单词?

3 个答案:

答案 0 :(得分:5)

你可以在文本之前和之后断言匹配,而不是通过Vim的特殊\zs(匹配开始)和\ze(匹配结束)原子在匹配中包含匹配:

/<\/\?\zs\w\+\ze\/\?>

我在两边都加了一个可选的(\?)斜杠(例如</this><this/>。另请注意,\w\+并非完整XML或HTML标记的正确表达式(但它可以是一个足够好的近似值,具体取决于您的数据)。

替代

对于大多数其他正则表达式引擎,您需要使用 lookbehind lookahead 来实现此目的。 Vim也有(\@<=\@=),但语法更笨拙,匹配性能可能更差。

答案 1 :(得分:1)

你不需要转义尖括号(方括号是[]),因为它们不是特殊字符。您可以使用捕获组

<\/?(.+)>

答案 2 :(得分:1)

在非vim环境中,使用正面的lookbehind和lookahead就可以实现这一点:

/(?<=<).*?(?=>)/

符合以下条件:

<test>         // test
</content>     // /content
<div id="box"> // div id="box"
<div id="lt>"> // div id="lt

正如你在最后一个例子中看到的那样,它并不完美,但你在html上使用正则表达式you get what you pay for

See the regex in action