查找不以某些东西开头的字符串

时间:2014-01-24 18:42:36

标签: regex

这已经过去但是我找不到任何可以持续工作的东西......或者协助我学习我出错的地方。

我的文件名以3位或更多位数开头,而^\d{3}(.*)效果很好。 我也有以“帐户”一词开头的字符串,^ACCOUNT(.*)可以正常使用。

我遇到的问题是所有其他字符串都不符合之前的两个标准。我一直在使用^[^\d{3}][^ACCOUNT](.*),但偶尔也没能抓到它。 任何见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

^[^\d{3}][^ACCOUNT](.*)

那绝对不是你想要的。方括号创建字符类:它们匹配括号中字符列表中的一个字符。如果您输入^,则匹配将被反转,并且匹配一个 列出的字符。括号内^的含义与其外部含义完全不同。

简而言之,[]根本不是你想要的。如果您的正则表达式实现支持, 可以做的是使用negative lookahead断言。

^(?!\d{3}|ACCOUNT)(.*)

这种负面的先行断言本身并不匹配任何东西。它仅检查字符串(.*)的下一部分是否与\d{3}ACCOUNT不匹配。

答案 1 :(得分:0)

Demorgan的法律说:!(A v B) = !A ^ !B

但遗憾的是Regex本身确实如此 支持表达式的否定。 (你总是可以重写它,但有时候,这是一项艰巨的任务)。

相反,您应该查看您的编程语言,您可以毫无问题地否定值:

让“匹配”函数为“匹配”,并使用match("^(?:\d{3}|ACCOUNT)(.)")来确定字符串是否与两个条件之一匹配。然后你可以简单地否定匹配函数的布尔返回值,你将收到每个不匹配的字符串。