正则表达式 - 理解否定的字符类

时间:2014-09-26 04:13:35

标签: regex

当我在正则表达式上查看权威教程网站时,否定字符类的定义总是类似于“匹配列表中不包含的所有字符”。但是在这个简单的例子中:"abc;xyz" -match "([^;]+)",我希望匹配将是“abcxyz”,但它不是(匹配所有不是分号的字符)。那么定义应该“匹配列表中没有的所有字符,但只能找到该列表中的字符”吗?

2 个答案:

答案 0 :(得分:2)

它应该是“匹配任何字符不在列表中”或“匹配字符,当且仅当它不在列表中时”。要认识到的重要一点是,角色类只会匹配一个角色。

在您的示例中,您匹配多个字符,因为您添加了+。对于任何正则表达式r,正则表达式r+匹配r的一个或多个连续匹配。因此[^;]+匹配abc,因为这是“abc; xyz”中最大,最早的子字符串,其中每个字符与[^;]匹配。

请注意,没有正则表达式会匹配不存在的子字符串。那就是没有正则表达式匹配“abc; xyz”中的“abcxyz”,因为“abcxyz”不是“abc; xyz”的子字符串。

答案 1 :(得分:0)

正则表达式引擎匹配' a'。然后贪婪地匹配''然后是' c'的贪婪比赛。

然后正则表达式引擎点击''并且不能再进一步,所以只有' abc'匹配。