我有一堆文字,例如:
foofoofooabcdefhjkldh389dn{pdf}images/1.pdf,100%,500{/pdf}hfnkjt8499duidjglkj
我想提取以下内容:
{pdf}images/1.pdf,100%,500{/pdf}
所以这是我制作的正则表达式:
#{pdf}(.*?){/pdf}#
检查结果时,我会回来:
Array
(
[0] => {pdf}images/1.pdf,100%,500{/pdf}
[1] => images/1.pdf,100%,500
)
我希望只获得数组中的第一项,而是有两项。 我正在使用PHP并进行测试我使用以下网站:PHP Regex Tester
我怎样才能获得{pdf}...{/pdf}
文字?
答案 0 :(得分:3)
你在你的正则表达式中使用一个组。在你的情况下,该组是
(.*?)
这会导致PHP为您提供完整的结果 {PDF} sometext {/ PDF} 以及第一组中的sometext。
只需尝试以下方法即可摆脱群组:
#{pdf}.*?{/pdf}#
答案 1 :(得分:1)
使用非捕获组,以确保中心文本不会显示为数组中的反向引用,并使用零宽度断言来确保{pdf}
部分不属于匹配项:
#(?<={pdf})(?:.*?)(?={/pdf})#
如果您想保留{pdf}
分隔符:
#{pdf}(?:.*?){/pdf}#
答案 2 :(得分:1)
你没有两个结果。
问题(虽然这不是问题)这里可能是使用函数preg_match
。此函数返回整个匹配查询,即{pdf}images/1.pdf,100%,500{/pdf}
,以及最终结果,即images/1.pdf,100%,500
。
所以你只需要使用$result[1]
进行进一步的解析。