如何更改我的正则表达式,使其不会在最后匹配额外的垃圾?

问题描述 投票:0回答:1

我有这样的文字:

asd dsa [SKU].[Analytic5].&[omg wtf] not found blah blah blah "&[omg wtf]".  Query Text: <ccon>SELECT {[SKU].[Analytic5].&[omg wtf]} ON 0 FROM [Model_week] CELL PROPERTIES CELL_ORDINAL</ccon>

我需要从那里提取 [SKU].[Analytic5].&[omg wtf]。其实是[SKU].[*].&[*].

我做了这个正则表达式:

\[SKU\]\.\[.*\]\.\&\[.*\]

它有效...有点...它会在第一个[天哪]之后抓取所有垃圾,直到最后一个[Model_week]遇到。 所以我的正则表达式的结果是:

[SKU].[Analytic5].&[omg wtf] not found blah blah blah "&[omg wtf]".  Query Text: <ccon>SELECT {[SKU].[Analytic5].&[omg wtf]} ON 0 FROM [Model_week]

我只是不明白如何限制它。我尝试过添加 {1} 之类的方法,但没有帮助。

.net regex
1个回答
2
投票

RegEx 量词

*
是一个贪婪量词,具有惰性等价物
*?

贪婪量词和惰性量词之间的区别在于,贪婪量词将尝试匹配尽可能多的字符,而惰性量词将尝试匹配尽可能少的字符。

在您的示例中,此效果是

[.*\]
匹配从第一个
[
到最后一个
]
的所有内容。但是,如果您将这些量词更改为其惰性等价物,您的正则表达式将按您的预期工作。

下面带有惰性量词的示例将与您期望的匹配:

\[SKU\]\.\[.*?\]\.\&\[.*?\]

上面正则表达式在您的代码片段中使用时的输出:

[SKU].[Analytic5].&[omg wtf]
© www.soinside.com 2019 - 2024. All rights reserved.