我的正则表达式(PCRE):
MarshalAs(UnmanagedType.LPStr)]
是一个匹配项(实际匹配项被星号包围):
\b([\w-.]*error)\b(?:[^-\/.]|\.\W|\.$|$)
不匹配:
**this.is.an.error**
**this.IsAnerror**
**this.is.an.error**.
**this.is.an.error**(
bla **this_is-an-error**
**this.is.an.error**:
this is an (**error**)
对于此示例:this.is.an.error.but.dont.match
this.is.an.error-but.dont.match
this.is.an.error/but.dont.match
this.is.an.error/
/this.is.an.error
如果以字符/this.is.an.error
开头,我将无法拒绝所有匹配。
我尝试过的每种组合都会导致部分捕获(这不是期望的)。
有没有简单或花哨的方法来做到这一点?
答案 0 :(得分:1)
您可以尝试在开头而不是单词边界处添加lookabehinds:
(?<!\/)(?<=[^\w-.])([\w-.]*error)\b(?:[^-\/.]|\.\W|\.$|$)
说明:
(?<!\/)
-向后寻找否定字符,以确保第一个字符之前没有/
; (?<=[^\w-.])
-考虑到您为单词[\w-.]
所接受的字符的扩展定义,单词边界的实现; 答案 1 :(得分:1)
用\/.*|
添加正则表达式:
\/.*|\b([\w-.]*error)\b(?=[^-\/.]|(?:\.\W?)?$)
现在,就像第一个捕获组拥有所需部分之前一样。
注意:我对您的正则表达式进行了一些修改,以删除不必要的更改。