0

我需要以某种已经有效的模式对数字进行正则表达式匹配,但前提是(+它前面没有。

示例字符串我想在以下范围内进行有效匹配:12, 12.5, 200/300, 200/300/400%,1/2/3/4/5/6/7

示例字符串我希望在以下范围内没有有效匹配:(+10% juice),(+4)

我已经可以使用 获得所有有效匹配项(\d+[/%.]?)+,但是我需要帮助来排除我想要没有有效匹配项的示例字符串(这意味着,只有(+在提到的模式前面没有字符串时才匹配)。

有人可以帮我吗?我已经尝试过!(like ?!(\(\+)(\d+[/%.]?)+) 但由于某种原因我无法按照我需要的方式工作。

(您可以使用http://gskinner.com/RegExr/实时测试正则表达式)

编辑:我确实可能使用了错误的词。我不想检查搜索字符串是否以开头,(+但我想确保(+我的字符串前面没有右边。

尝试使用以下输入的 regexr:

匹配:(\d+[/%.]?)+

选中复选框global(在文本中搜索多个匹配项)

文本:

this should find a match: 200/300/400
this shouldnt find any match at all: (+100%) 
this should find a match: 40/50/60%
this should find a match: 175

目前它将在所有 4 行中找到匹配项。我想要一个不再在第 2 行找到匹配项的正则表达式。

4

1 回答 1

1

您想要的正则表达式构造是“Negative Lookbehind” - 请参阅http://www.regular-expressions.info/lookaround.html。否定的后视定义就像(?<!DONTMATCHME)DONTMATCHME 是您不想在表达式的下一个位之前找到的表达式。至关重要的是,lookbehind 位不被视为匹配本身的一部分

你的表达应该是:

(?<![+\d/\.])(\d+[/%.]?)+

编辑 - 将否定后视更改为任何不是 + 或其他数字的字符!编辑#2 - 将后视移到主捕获括号之外。将匹配前不可接受字符的范围扩大到包括/&.

于 2013-10-11T08:30:56.010 回答