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