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

Regex before word not starting with specific characters

我不想匹配特定的单词 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|şubat 2013|şub 2013|şubat 13|şub 13

etc..

这可以通过 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

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

尝试 this.See 演示。

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