Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何创建与字符串的某些变体不匹配的正则表达式?_Regex - Fatal编程技术网

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

Regex 如何创建与字符串的某些变体不匹配的正则表达式?,regex,Regex,我希望构建一个与下面第一个示例不匹配的正则表达式,接下来的两行是可接受匹配的示例 Distribute( SystemEvent, device, NULL) Distribute(123) Distribute( 123) 换句话说,我想匹配Distribute,后跟可选空格,后跟任何不以大写字母S开头的内容 下面的表达式与第一行匹配,尽管我认为[^S]会停止此操作 Distribute\( ?[^S]s 第一行匹配是因为?长度为零的马赫数,然后空间在[^S]以下。因此,为neg组添加空间

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

Distribute( SystemEvent, device, NULL)
Distribute(123)
Distribute( 123)
换句话说,我想匹配Distribute,后跟可选空格,后跟任何不以大写字母S开头的内容

下面的表达式与第一行匹配,尽管我认为[^S]会停止此操作

Distribute\( ?[^S]s

第一行匹配是因为?长度为零的马赫数,然后空间在[^S]以下。因此,为neg组添加空间。

解决此问题的一种方法是考虑到它是PCRE:

分发\?+[^S]

在后面加一个+?你可以修改它,使它具有占有性,你可以尽可能多地匹配它,而不返回


在你的regexp上,自从?不是posessive,它匹配了0次,然后匹配了一个非“S”a空格

我不完全确定您的意图,但如果您依赖人工输入,您可能应该允许多个空格

分发\*+[^S]

试试这个

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

这将匹配Distribute,后跟一个可能的空格,然后使用正向前瞻检查下一个字符是否为空白字符,然后检查该字符是否也不是S,然后检查一个或多个not字符,后跟一个

您使用的是哪种编程语言?Renesas HEW IDEI认为是C这个将匹配上一个“空白”字符的零个或一个匹配项。“S”前面的空格是可选的。顺便说一句,尾随的“s”是一个输入错误。括号需要转义。@UnerableLightness谢谢。@user2579721是的,它试图将空格与空格匹配,但在s处失败,所以它返回并在另一条路上成功。Downvoter,请解释:它不正确,您想在这里使用先行。为什么不正确?你能详细说明一下失败的地方吗?他为什么要使用前瞻性?我删除了下一票,但我认为OP只想匹配分发。关于空格的观点很好,但在这种情况下是程序调试输出,所有输出都以零或一个空格开始。
Distribute\( ?(?=\S)(?=[^S])[^)]+\)