Php 花括号之间的正则表达式匹配产生的结果太多

Php 花括号之间的正则表达式匹配产生的结果太多,php,regex,match,curly-brackets,Php,Regex,Match,Curly Brackets,我有一堆文本,例如: fooabcdefhjkldh389dn{pdf}images/1.pdf,100%,500{/pdf}hfnkjt8499duidjglkj 我想摘录以下内容: {pdf}images/1.pdf,100%,500{/pdf} 这是我做的一个正则表达式: {pdf}(.*){/pdf}# 检查我得到的结果时: 数组 ( [0]=>{pdf}图像/1.pdf,100%,500{/pdf} [1] =>图像/1.pdf,100%,500 ) 我希望只获取数组中的第一项

我有一堆文本,例如:

fooabcdefhjkldh389dn{pdf}images/1.pdf,100%,500{/pdf}hfnkjt8499duidjglkj
我想摘录以下内容:

{pdf}images/1.pdf,100%,500{/pdf}
这是我做的一个正则表达式:

{pdf}(.*){/pdf}#
检查我得到的结果时:

数组
(
[0]=>{pdf}图像/1.pdf,100%,500{/pdf}
[1] =>图像/1.pdf,100%,500
)
我希望只获取数组中的第一项,但实际上有两项。 我正在使用PHP,为了进行测试,我使用了以下网站:


如何仅获取
{pdf}…{/pdf}
文本?

使用非捕获组以确保中心文本不会在数组中显示为反向引用,并使用零宽度断言以确保
{pdf}
部分不属于匹配:

#(?<={pdf})(?:.*?)(?={/pdf})#

使用非捕获组,以确保中心文本不会在数组中显示为反向引用,并使用零宽度断言以确保
{pdf}
部分不是匹配的一部分:

#(?<={pdf})(?:.*?)(?={/pdf})#

您可以在正则表达式中使用组。在你的情况下,团队是

(.*?)
这导致PHP向您提供完整的结果{PDF}sometext{/PDF}和在第一个组中找到的sometext

只需尝试以下操作即可摆脱该组:

#{pdf}.*?{/pdf}#

您可以在正则表达式中使用组。在你的情况下,团队是

(.*?)
这导致PHP向您提供完整的结果{PDF}sometext{/PDF}和在第一个组中找到的sometext

只需尝试以下操作即可摆脱该组:

#{pdf}.*?{/pdf}#

你没有两个结果

这里的问题(虽然不是问题)是可能使用了函数。此函数返回整个匹配查询,即
{pdf}images/1.pdf,100%,500{/pdf}
,以及最终结果,即
images/1.pdf,100%,500


因此,您只需要使用
$result[1]
进行进一步的解析。

您没有两个结果

这里的问题(虽然不是问题)是可能使用了函数。此函数返回整个匹配查询,即
{pdf}images/1.pdf,100%,500{/pdf}
,以及最终结果,即
images/1.pdf,100%,500

因此,您只需要使用
$result[1]
进行进一步的解析