如何从现有的RegEx模式中排除几个单词

时间:2013-01-01 04:46:23

标签: regex

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

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

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

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

我试图查询并查看论坛,但我担心我的正则表达式知识有限。那里有人可能有解决方案吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你可能会尝试这个。它完成了你给出的例子。

%([A-LNP-VX-Z] +)\ C |%((?:[0-9] [^ W] {1,19})|(([AZ] {2,20 })))\ b'/ p>

答案 2 :(得分:0)

我认为你可能希望模仿匹配你真正想要的东西,而不是试图排除你不想要的东西。

这是printf

的粗略正则表达式
%([+- #0])?(([1-9][0-9]*)|\*)?(\.([1-9][0-9]*)|\*)?([hljztL]|hh|ll)?[diuoxXfFeEgGaAspn]