【问题标题】:How to validate regular expresion working wrong如何验证正则表达式工作错误
【发布时间】: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。那么,你的要求是什么?在空格或字符串的开始/结束之间找到模式时匹配?试试(?&lt;!\S)(@[\p{L}_]\w*)(?!\S)

标签: regex visual-studio-code plist


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多