正则表达式帮助 - 找到某些子串而不是其他子串

时间:2012-07-12 13:13:05

标签: regex

我正在尝试构建一个正则表达式,用于查找字符串中是否有逗号,但不是斜杠逗号。例如 - 这里有匹配: aaa,aaa 这里没有匹配项: aaa \,aaa

你能想到一个解决方案吗?

3 个答案:

答案 0 :(得分:2)

这应该有效:[^\\],。它应匹配任何不是\后跟,的字符。 (我使用Regex Pal的Regex Tester进行了测试)。在您的情况下,根据您使用的语言,您可能只需要使用它:[^\],

但是,此模式假定, 不是字符串中的第一个字母。如果您还想要应对这种可能性,您应该考虑使用它:(^,)|([^\\],)。这将检查,是字符串的第一个字母,还是前面没有\

编辑:问题似乎是对于这样的情况:aaa,aaa,我建议的正则表达式采用其中一个字符(,之前的那个字符)。我在Java代码中尝试了以下行:String[] grp = "aaa,aaa".split("(?<!\\\\),");它对我有用(如上面其他答案中所提出的)。如果您提供有关您使用的语言的信息,则可能有更大的机会获得帮助。

答案 1 :(得分:1)

您可以使用negative lookbehind仅匹配逗号:

/(?<!\\),/

如果你的正则表达式引擎不支持,你可以使用negated character class,它也匹配逗号之前的字符(或字符串start):

/(^|[^\\]),/

答案 2 :(得分:1)

试试这个:

.*(?<!\\),.*

一般来说,这种类型有四种不同的断言:

(?=pattern)
    is a positive look-ahead assertion
(?!pattern)
    is a negative look-ahead assertion
(?<=pattern)
    is a positive look-behind assertion
(?<!pattern)
    is a negative look-behind assertion