1

我有...

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

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

(?=Data Source).*;

但它将所有内容匹配到“sa”。这真的很烦人,我只是不明白为什么会发生这种情况。.* 表示任意数量的字符,然后是 ';' 应该停在第一个。它不会停在第四个。为什么是这样?我该如何解决?

4

1 回答 1

3

*量词是贪心的,它会匹配尽可能多的字符,直到匹配不到下一个token,不得不回溯。在这种情况下,.*将匹配所有内容,直到;字符串中的最后一个。

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

根据语言的支持,量词的行为,如*,+,{n,m}通常可以通过,,?之后。*?+?{n,m}?

于 2012-07-19T09:40:18.460 回答