6

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

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

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

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

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

4

3 回答 3

1

你可以试试这个。它满足您给定的示例。

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

于 2013-01-01T09:34:46.400 回答
1

如果您想匹配除五个非常具体的占位符之外的所有占位符,并且您的代码允许,最简单的方法可能是首先匹配所有占位符,然后(如果匹配)使用另一个正则表达式检查五个“禁止”的占位符并忽略他们。编写一个匹配%d, %1d, %4d, %4w但不匹配 的 RegExp%1w将是……有趣的。当然可能,只是不好玩。

于 2013-01-01T06:13:50.357 回答
0

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

这是 printf 的粗略正则表达式

%([+- #0])?(([1-9][0-9]*)|\*)?(\.([1-9][0-9]*)|\*)? ([hljztL]|hh|ll)?[diuoxXfFeEgGaAspn]
于 2013-01-01T06:07:43.227 回答