Regex 正则表达式匹配的数字不是

Regex 正则表达式匹配的数字不是,regex,vi,Regex,Vi,我正在尝试对自定义文件格式进行语法分析。 我只想突出显示数字,但数字可以有几种格式。尽管数字不应该是变量名或某种类型的单词 为了保持简单,让我们假设我正在寻找任何数量的这种类型 [0-9][\.0-9]*我希望只保留数字,而不是填充。然而,唯一的问题是,这收集了比我想要的更多的案例。 这些是我正在寻找的一些失败案例 避免使用variable123或variable123名称或_123, 其中一些可接受的情况是|123 |或+123+$123%ext。。。11 2123 123%0.12 1.1.

我正在尝试对自定义文件格式进行语法分析。 我只想突出显示数字,但数字可以有几种格式。尽管数字不应该是变量名或某种类型的单词

为了保持简单,让我们假设我正在寻找任何数量的这种类型
[0-9][\.0-9]*
我希望只保留数字,而不是填充。然而,唯一的问题是,这收集了比我想要的更多的案例。 这些是我正在寻找的一些失败案例 避免使用
variable123或variable123名称或_123
, 其中一些可接受的情况是
|123 |或+123+$123%ext。。。11 2123 123%0.12 1.1.3.4.4 12 1 23452 23423 |
ext

我基本上只是希望摆脱不必要的变量突出显示,同时保持数字突出显示在一个更宽松的情况下,这些数字可以在列表中由许多其他随机字符包围。我曾经尝试过lookaheads,从这个网站上找到了几个例子,但没有找到好的解决方案。我有一些不合格的标准,我希望hilighting标准是宽松的。有很多数字,但唯一需要解决的重要情况是,当数字嵌入到id标记中时,通常类似于变量decellation。这意味着字符串中不应包含字母
[a-zA-Z]
,也不应包含下划线
[\u a-zA-Z]
,并尝试使用此架构通过查找消除这些情况。虽然这并没有解决我的问题

更新

在重新阅读您的问题后,应该可以使用此功能完成此操作

格式化

 (?<! \w )
 \d [.\d]* 
 (?! \w )
     (?<= \| )
     \d+ 
     (?= \| )
  |  
     (?<= \+ )
     \d+ 
     (?= \+ )
  |  
     (?<= \$ )
     \d+ 
  |  
     \d+ 
     (?= % )
(?
或者,如果您不想在数字后匹配尾随点,则此点


只需滚动您自己的正则表达式。
使用断言限定要突出显示的数字


(?如果可用,请使用单词边框匹配

\<[0-9][\.0-9]*\>
\

看到这一点我不知道,vi使用什么引擎?我记得30年前的vi,它从未被更新过吗?其实它不是vi,但确切地说是vi的衍生产品,答案是否定的。它只支持一小部分正则表达式来解析语法,我们的编程语言是内部开发的,所以我想为它制作一个解析器。很抱歉,我用我的例子误导了你。有更多的案例需要考虑。我将添加这些。我很欣赏这个答案。它有助于澄清一些积极的前瞻。我还有几个问题,这是因为我的系统是多么有限。我不支持字符类(\d或w)。还有lookaheads。有没有比您原来的语句更简单的解决方案?只需推出每个pass case?@user2716722-这就形成了3个捕获组。如果您正在写回控制代码以进行突出显示:组1和组3将原封不动地写回。组2是您想要添加控制代码的。例如,repla水泥将是
\1
++
\2
++
\3
。但是,由于这与周围的字符匹配,它将错过一些相邻的匹配。这是在没有前向/后向的情况下发生的。