当我在正则表达式上查看权威教程网站时,否定字符类的定义总是类似于“匹配列表中不包含的所有字符”。但是在这个简单的例子中:"abc;xyz" -match "([^;]+)",我希望匹配将是“abcxyz”,但它不是(匹配所有不是分号的字符)。那么定义应该“匹配列表中没有的所有字符,但只能找到该列表中的字符”吗?
答案 0 :(得分:2)
它应该是“匹配任何字符不在列表中”或“匹配字符,当且仅当它不在列表中时”。要认识到的重要一点是,角色类只会匹配一个角色。
在您的示例中,您匹配多个字符,因为您添加了+
。对于任何正则表达式r
,正则表达式r+
匹配r
的一个或多个连续匹配。因此[^;]+
匹配abc
,因为这是“abc; xyz”中最大,最早的子字符串,其中每个字符与[^;]
匹配。
请注意,没有正则表达式会匹配不存在的子字符串。那就是没有正则表达式匹配“abc; xyz”中的“abcxyz”,因为“abcxyz”不是“abc; xyz”的子字符串。
答案 1 :(得分:0)
正则表达式引擎匹配' a'。然后贪婪地匹配''然后是' c'的贪婪比赛。
然后正则表达式引擎点击''并且不能再进一步,所以只有' abc'匹配。