单词之前的正则表达式不是以特定字符开头

时间:2015-04-17 13:50:45

标签: regex pcre negative-lookahead

我不想匹配特定字词may|may15,不是从特定字符x|-|+开始

  

TRADED; Mar15 x May15,5 MW Base 121,50 TL

示例:

x May15 > WRONG
- May15 > WRONG
+ May15 > WRONG
xMay15  > WRONG
-May15  > WRONG
+May15  > WRONG
May15   > TRUE
May15,  > TRUE
May15 + > FALSE
May15 x > FALSE
etc...

我试过以下但匹配:

(?<!-)\b(?![x|\-|\+]\s?)(may|may15)(?!\s[x|\-|\+])\b(?!-)(\s|\,)

演示: https://regex101.com/r/eV3kW3/1

字符是静态的:+ -+

但言语是动态的,这些都是几个月:

  

jan | jan13 | jan-13 | ocak 2013 | oca 2013 | ocak 13 | oca 13

     

feb | feb13 | feb-13 |şubat2013|şub2013|şubat13|şub13

     

等。

2 个答案:

答案 0 :(得分:2)

这可以通过PCRE动词(*SKIP)(*F)

实现
[-x+]\h*may(?:15)?(*SKIP)(*F)|may(?:15)?

DEMO

首先,[-x+]\h*may(?:15)?会匹配您要排除的所有may字符串。然后,以下(*SKIP)(*F)部分使匹配失败。现在,正则表达式引擎使用|运算符旁边的模式来匹配字符串剩余部分中的字符。 \h*匹配零个或多个水平空白字符。

<强>更新

(?:[-x+]\h*may(?:15)?|may(?:15)?\h*[-x+])(*SKIP)(*F)|may(?:15)?

DEMO

答案 1 :(得分:1)

[x+-]\s*(?:may15|may)\K|(?:may15|may)\s*[x+-]\K|(?:may15|may)

试试这个。看看演示。

https://regex101.com/r/sJ9gM7/127