如何验证正则表达式工作错误

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。那么,你的要求是什么?在空格或字符串的开始/结束之间找到模式时匹配?试试(?&lt;!\S)(@[\pL_]\w*)(?!\S) 【参考方案1】:

正则表达式是正确的。问题是我正在编写一个 vs 代码扩展,我不得不把这一行放在文件的上部,因为有另一个正则表达式干扰。 谢谢! @WiktorStribiżew

【讨论】:

以上是关于如何验证正则表达式工作错误的主要内容,如果未能解决你的问题,请参考以下文章

仅在提交时基于正则表达式的验证

大陆港澳台身份证护照军官证的正则表达式

如何使用带有 Ajv 的正则表达式验证字符串?

正则表达式验证属性无法正常工作

Laravel 正则表达式验证错误

用于密码验证的正则表达式