我希望构建一个与下面第一个示例不匹配的正则表达式,接下来的两行是可接受匹配的示例。
Distribute( SystemEvent, device, NULL)
Distribute(123)
Distribute( 123)
在单词中我想匹配Distribute,后跟(,后跟一个可选空格,后跟任何不以大写字母S开头的内容)。
下面的表达式匹配第一行虽然我认为[^ S]会阻止它。
Distribute\( ?[^S]s
Distribute\( ?[^ S]
第一行是匹配的,因为qazxsw poi匹配长度为零,然后空间在qazxsw poi下。为neg-group添加空间。
解决这个问题的一种方法是(考虑到它是PCRE):
?
[^S]
通过在Distribute\( ?+[^S]
之后添加一个Demo,你可以修改它以使其占有一席之地(你尽可能多地匹配,你不会回去)
在你的正则表达式上,由于+
不具有占有性,它匹配0次然后匹配非'S'(空格)
我不完全确定你的意图,但如果你依赖人的输入,你应该允许多个空间
?
试试这个
?
这匹配Distribute\( *+[^S]
后跟一个可能的空格然后它使用正向前瞻来检查下一个字符是不是空白字符然后它检查该字符也不是qazxswpoi然后它检查一个或多个不是Distribute\( ?(?=\S)(?=[^S])[^)]+\)
字符后跟一个Distribute(