【发布时间】:2019-11-12 18:49:15
【问题描述】:
我正在为语法高亮 vscode 扩展编写正则表达式,但没有按预期工作。正则表达式位于plist 文件中,如下所示:
<string>(\@[\p{L}_]+[\w]*)</string>
我想这个表达式会找到@variable。
我的问题是只找到以下内容:@@variable。
因此,当它前面有一个 @ 字符时,它只会找到我想要的字符串。为什么会这样?
当我写表达式时:
<string>(\#[\p{L}_]+[\w]*)</string>
我想这个表达式会找到#key。该表达式正常工作。
此外,如果我使用这个工具https://regexr.com/ 来测试正则表达式,它工作正常。那么vs代码有什么问题呢?这可能与表达式标志有关?
有人知道这个问题吗?
【问题讨论】:
-
这没有多大意义。
(\@[\p{L}_]+[\w]*)正则表达式匹配@、1+ 个字母或_以及任何 0 个或多个单词字符。因此,它可以匹配@variable,而不是@@variable。如果匹配没有锚定,它可以在@@variable中匹配@variable。我们如何重现这个问题? -
那我该如何解决这个问题呢? @WiktorStribiżew
-
如何锚定表达式?
-
所以,我是对的:找到的不是
@@var,而是@var中的@@var。那么,你的要求是什么?在空格或字符串的开始/结束之间找到模式时匹配?试试(?<!\S)(@[\p{L}_]\w*)(?!\S)
标签: regex visual-studio-code plist