Regex 如何从现有正则表达式模式中排除几个单词

Regex 如何从现有正则表达式模式中排除几个单词,regex,Regex,我有以下匹配占位符的模式,例如(%s,%16.6fAl,%d,等等): %([a-z]+)\b|%([a-z0-9\.]{2,20})\b 但是,我确实需要忽略以下占位符: %w%1w%2w%3w%O%M 我曾试图查找和检查论坛,但恐怕我的正则表达式知识有限。有没有人可能有解决方案?我认为您可能希望模式匹配您实际需要的内容,而不是尝试排除您不需要的内容 这里是printf的粗略regexp %([+- #0])?(([1-9][0-9]*)|\*)?(\.([1-9][0-9]*)|\*)?([

我有以下匹配占位符的模式,例如(
%s
%16.6fAl
%d
,等等):

%([a-z]+)\b|%([a-z0-9\.]{2,20})\b

但是,我确实需要忽略以下占位符:

%w
%1w
%2w
%3w
%O
%M


我曾试图查找和检查论坛,但恐怕我的正则表达式知识有限。有没有人可能有解决方案?

我认为您可能希望模式匹配您实际需要的内容,而不是尝试排除您不需要的内容

这里是printf的粗略regexp

%([+- #0])?(([1-9][0-9]*)|\*)?(\.([1-9][0-9]*)|\*)?([hljztL]|hh|ll)?[diuoxXfFeEgGaAspn]
%([+-[0])?([1-9][0-9]*)\*)(\.([1-9][0-9]*)\*)?([hljztL]| hh | ll);[diuoxXfFeEgGaAspn]如果要匹配除五个非常特定的占位符之外的所有占位符,并且代码允许,最简单的方法可能是首先匹配所有占位符,然后(如果匹配)使用另一个正则表达式检查五个“禁止”的占位符并忽略它们。编写将匹配
%d
%1d
%4d
%4w
但不匹配
%1w
的RegExp将是。。。有趣。当然可能,只是不好玩。

你可以试试这个。它符合你给出的例子


%([a-lnp-vx-z]+)\b |%((?:[0-9][^w]{1,19})([a-z.]{2,20}))\b

您想排除哪些模式?我想排除以下模式:%w%1w%2w%3w%O%M@user1940524这些可能是相关的/有用的:,,它们确实有用,我能想到的最好的方法是:(?!%O)(?!%M)(?!%w)(?!%1w)(?!%2w)(?!%3w)([a-z]+)\b |%([a-z0-9\.]{2,20})\b。这在一定程度上是可行的,但搜索仍然包括
%1w
%2w
%3w
——有趣的是,这些搜索只包含数字。恐怕我已经完全停下来了。@user1940524别担心……今天是假日,但我相信你会在这里得到答案的。只要记得经常检查。没有额外的组:
%([a-lnp-vx-z]+)\b |%([0-9][^w]{1,19}|[a-z.]{2,20})\b