我有......
"Data Source=MYSERVER.dghdev.ds;Initial Catalog=CarPath;Persist Security Info=True;User ID=sa;Password=Password1"
我写了正则表达式......
(?=Data Source).*;
但是它与“sa”相匹配。哪个真烦人我只是不明白为什么会这样。 。*表示任意数量的字符,然后是';'应该停在第一个。它并没有停在第四个。为什么是这样?我该如何解决?
答案 0 :(得分:3)
*
量词是贪婪的,它将匹配尽可能多的字符,直到它与下一个令牌不匹配并且必须回溯。在这种情况下,.*
将匹配字符串中最后一个;
的所有内容。
如果您想在第一个;
停留,则需要量化器的惰性版本:*?
。换句话说,你的正则表达式应该是(?=Data Source).*?;
。只要下一个标记可以匹配,延迟量词就会尝试匹配尽可能少的字符。
根据语言的支持 ,量词的行为(例如*
,+
,{n,m}
通常可以在?
,*?
,+?
之后立即添加{n,m}?
,使其变得懒惰。