使用正则表达式查找不以某个字符串开头的模式

时间:2013-10-11 08:19:20

标签: regex

我需要以某种模式匹配正则数字,这种模式已经有效,但前提是它前面没有(+

示例字符串我想在以下内容中进行有效匹配:1212.5200/300200/300/400%1/2/3/4/5/6/7

示例字符串我希望在(+10% juice)(+4)

中没有有效匹配

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

有人可以帮帮我吗?我已经尝试过(+(例如!),但出于某种原因,我无法以我需要的方式工作。

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

编辑:我的确可能使用错误的词语。我不想检查searchstring是否以?!(\(\+)(\d+[/%.]?)+开头,但我想确保我的String前面没有(+

使用以下输入尝试regexr:

匹配:(+

选中(\d+[/%.]?)+的复选框(在文字中搜索多个匹配项)

文本:

global

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

1 个答案:

答案 0 :(得分:1)

你想要的正则表达式构造是&#34;负面观察&#34; - 见http://www.regular-expressions.info/lookaround.html。负面的lookbehind被定义为(?<!DONTMATCHME),其中DONTMATCHME是你不想在表达式的下一位之前找到的表达式。最重要的是,后卫位不被认为是比赛本身的一部分

你的表达应该是:

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

编辑 - 将负面的lookbehind更改为任何不是+或其他数字的字符! 编辑#2 - 在主捕获括号外移动了lookbehind。在比赛前扩大了不可接受的字符范围,以包括/&amp; .