正则表达式 - 在字符串中获取@ [SomeText]的匹配项

时间:2015-05-07 11:03:44

标签: c# regex

我希望在字符串中获得foreach($items as $item){ $total = $item->getFinal(); $qtyTotal += $cart[$item->id] * $total; } 模式的所有匹配。

例如,对于此字符串:

这里有@[SomeText]一些文字@[text1]

我想要@[text2]@[text1]

我正在使用Regex Hero检查我的模式在线匹配, 当有一个匹配的表达式时,我的模式工作正常,

例如:

@[text2]

但有一个以上,我得到两个匹配文本在中间。

enter image description here

这是我的正则表达式:

here is @[text1] text

我很感谢帮助隔离事件。

3 个答案:

答案 0 :(得分:2)

这里的问题是你使用的是贪心量词(*)。要捕获您需要的所有内容,您应该使用延迟量词(*?)和全局修饰符:

/(@\[.*?\])/g

看看https://regex101.com/r/pH0gA5/1

答案 1 :(得分:1)

这应该有效:

@\[(.*?)\]

详细信息:

(。*?):以非贪婪的方式匹配所有内容并捕获它。 因为*?量词是懒惰的(非贪婪的),它匹配尽可能少的字符以允许整体匹配尝试成功,即text1。对于从给定位置开始的匹配尝试,延迟量词为您提供最短匹配。

答案 2 :(得分:0)

默认情况下,

。*是贪婪的,所以它只找到一个匹配,将“text1”和@ [text2“视为两个方括号之间的文本。

如果在。*之后添加问号,则会在到达之前找到最小字符数。

所以正则表达式\ @ [。*?]做你想做的事。