如何通过正则表达式获得字符串的第一个匹配?

时间:2011-11-07 12:13:27

标签: regex

我有以下文字字符串:

$ ABCD(file =“somefile.txt”)$'/>更多文字后跟一个美元,就像这个一样)$。一些更随机的文字

我正在尝试使用正则表达式匹配字符串的 $ ABCD(file =“somefile.txt”)$ 部分。

我正在使用(?= [$] ABCD [(] file =)。*(?< = [)] [$])正则表达式模式来进行预期的匹配。它没有按预期工作,因为我一直在匹配字符串中的第二个)$

例如,匹配如下:

$ ABCD(file =“somefile.txt”)$'/>更多文字后面跟一个美元一样)$

我应该如何修改模式以匹配)$ 第一次出现的结尾?

这是一个很好的在线正则表达式引擎测试器: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

3 个答案:

答案 0 :(得分:2)

尝试将?附加到贪婪的*

(?=[$]ABCD[(]file=).*?(?<=[)][$])

Lazy quantification

  

正则表达式中的标准量词是贪婪的,意思是   他们尽可能地匹配。现代正则表达式工具允许通过在量词之后放置一个问号来将量词指定为惰性(也称为“非贪婪,不情愿,最小或不同意”)

答案 1 :(得分:1)

你可以使用它:

\$ABCD\(file="[a-z.]+"\)\$

获取$ABCD(file="somefile.txt")$

你的问题是.*位,它过于笼统,因此匹配到最后$的所有内容。

答案 2 :(得分:0)

我希望您使用第二个引号来定义搜索模式的结尾:[^"]*将匹配除"之外的任何内容。

因此文件名的模式为:\$ABCD\(file="([^"]*)