正则表达式只匹配一整套由两部分组成的模式(有点非贪婪)

regex to only match a full set of two-part pattern (kinda non-greedy)

我使用 preg_match_all 来获取两部分模式的所有匹配项:

/<(.*?)>[:|\s]+{(.*?)}/

在像这样的字符串中:

<First>: something <second>: {Second} something <Third>: {Third}

我要匹配:

<second>: {Second}

而不是:

<First>: something <second>: {Second}

Working Example

我哪里做错了?

在括号内使用有限的重复集而不是惰性重复:

<([^>]*)>[:\s]+{(.*?)}

更改是将 <(.*?)> 替换为 <([^>]*)>。初始版本匹配第一个 <,然后懒惰地接受任何字符,直到找到 :{Second}。如果您限制重复,正则表达式引擎将尝试从 <First> 开始,但当它在之后找不到 :{...} 时,它将尝试下一个 <

Demo