我希望构建一个与下面的第一个示例不匹配的正则表达式,接下来的两行是可接受的匹配的示例。
Distribute( SystemEvent, device, NULL)
Distribute(123)
Distribute( 123)
换句话说,我想匹配Distribute,然后是(,然后是一个可选空格,然后是所有不以大写字母S开头的内容。
下面的表达式与第一行匹配,尽管我认为[^ S]会阻止它。
Distribute\( ?[^S]s
答案 0 :(得分:4)
Distribute\( ?[^ S]
匹配第一行是因为?
的长度为零,然后空格位于[^S]
下。因此,请向neg-group添加空间。
答案 1 :(得分:0)
一种解决它的方法是(考虑到PCRE):
Distribute\( ?+[^S]
通过在+
之后添加?
,您可以对其进行修改以使其具有可能性(您将尽可能多地匹配,并且不回头)
在您的正则表达式上,由于?
不构成姿势,因此它匹配0次,然后匹配非'S'(空格)
答案 2 :(得分:0)
我不确定您的意图,但是如果您依靠人工输入,则可能需要留出多个空间
Distribute\( *+[^S]
答案 3 :(得分:0)
尝试
Distribute\( ?(?=\S)(?=[^S])[^)]+\)
这与Distribute(
匹配,后跟一个可能的空格,然后使用正向前瞻检查下一个字符是否不是空格字符,然后检查该字符也不是S
然后它会检查一个或多个非)
字符,然后是)