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])[^)]+\)