为什么这个正则表达式与指定的第一个字符不匹配?

时间:2012-07-19 09:37:55

标签: regex

我有......

"Data Source=MYSERVER.dghdev.ds;Initial Catalog=CarPath;Persist Security Info=True;User ID=sa;Password=Password1"

我写了正则表达式......

(?=Data Source).*;

但是它与“sa”相匹配。哪个真烦人我只是不明白为什么会这样。 。*表示任意数量的字符,然后是';'应该停在第一个。它并没有停在第四个。为什么是这样?我该如何解决?

1 个答案:

答案 0 :(得分:3)

*量词是贪婪的,它将匹配尽可能多的字符,直到它与下一个令牌不匹配并且必须回溯。在这种情况下,.*将匹配字符串中最后一个;的所有内容。

如果您想在第一个;停留,则需要量化器的惰性版本:*?。换句话说,你的正则表达式应该是(?=Data Source).*?;。只要下一个标记可以匹配,延迟量词就会尝试匹配尽可能少的字符。

根据语言的支持 ,量词的行为(例如*+{n,m}通常可以在?*?+?之后立即添加{n,m}?,使其变得懒惰。