正则表达式只匹配一整套由两部分组成的模式(有点非贪婪)
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}
我哪里做错了?
在括号内使用有限的重复集而不是惰性重复:
<([^>]*)>[:\s]+{(.*?)}
更改是将 <(.*?)>
替换为 <([^>]*)>
。初始版本匹配第一个 <
,然后懒惰地接受任何字符,直到找到 :{Second}
。如果您限制重复,正则表达式引擎将尝试从 <First>
开始,但当它在之后找不到 :{...}
时,它将尝试下一个 <
我使用 preg_match_all
来获取两部分模式的所有匹配项:
/<(.*?)>[:|\s]+{(.*?)}/
在像这样的字符串中:
<First>: something <second>: {Second} something <Third>: {Third}
我要匹配:
<second>: {Second}
而不是:
<First>: something <second>: {Second}
我哪里做错了?
在括号内使用有限的重复集而不是惰性重复:
<([^>]*)>[:\s]+{(.*?)}
更改是将 <(.*?)>
替换为 <([^>]*)>
。初始版本匹配第一个 <
,然后懒惰地接受任何字符,直到找到 :{Second}
。如果您限制重复,正则表达式引擎将尝试从 <First>
开始,但当它在之后找不到 :{...}
时,它将尝试下一个 <