如何创建与字符串的某些变体不匹配的正则表达式?

时间:2018-08-14 14:26:17

标签: regex

我希望构建一个与下面的第一个示例不匹配的正则表达式,接下来的两行是可接受的匹配的示例。

Distribute( SystemEvent, device, NULL)
Distribute(123)
Distribute( 123)

换句话说,我想匹配Distribute,然后是(,然后是一个可选空格,然后是所有不以大写字母S开头的内容。

下面的表达式与第一行匹配,尽管我认为[^ S]会阻止它。

Distribute\( ?[^S]s

4 个答案:

答案 0 :(得分:4)

Distribute\( ?[^ S]

匹配第一行是因为?的长度为零,然后空格位于[^S]下。因此,请向neg-group添加空间。

答案 1 :(得分:0)

一种解决它的方法是(考虑到PCRE):

Distribute\( ?+[^S]

Demo

通过在+之后添加?,您可以对其进行修改以使其具有可能性(您将尽可能多地匹配,并且不回头)

在您的正则表达式上,由于?不构成姿势,因此它匹配0次,然后匹配非'S'(空格)

答案 2 :(得分:0)

我不确定您的意图,但是如果您依靠人工输入,则可能需要留出多个空间

Distribute\( *+[^S]

答案 3 :(得分:0)

尝试

Distribute\( ?(?=\S)(?=[^S])[^)]+\)

这与Distribute(匹配,后跟一个可能的空格,然后使用正向前瞻检查下一个字符是否不是空格字符,然后检查该字符也不是S然后它会检查一个或多个非)字符,然后是)