PHP和RegEx来获取字符串内部的值


PHP and RegEx to grab a value inside of a string

使用PHP和RegExp,我需要获取<rdf:li xml:lang="x-default"></rdf:li> 内部的值

所以我需要一个值的字符串中会有这行…

<rdf:li xml:lang="x-default">Yuengling Americas Oldest Brewery Huffmans Pub &amp; Grub 60x30 5</rdf:li>

我需要将Yuengling Americas Oldest Brewery Huffmans Pub &amp; Grub 60x30 5放入一个PHP变量中。我对Regex不好,有人能帮我得到这个值吗?

$str = '<rdf:li xml:lang="x-default">Yuengling Americas Oldest Brewery Huffmans Pub &amp; Grub 60x30 5</rdf:li>';

我的字符串来自于读取的内容。AI文件。。。。

%PDF-1.5
%âãÏÓ
1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[7 0 R]/Order 8 0 R/RBGroups[]>>/OCGs[7 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 67315/Subtype/XML/Type/Metadata>>stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:format>application/pdf</dc:format>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">Yuengling Americas Oldest Brewery Huffmans Pub &amp; Grub 60x30 5</rdf:li>
            </rdf:Alt>
         </dc:title>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
         <xmp:MetadataDate>2014-04-01T16:13-05:00</xmp:MetadataDate>
         <xmp:ModifyDate>2014-04-01T16:13-05:00</xmp:ModifyDate>
         <xmp:CreateDate>2014-04-01T16:13-05:00</xmp:CreateDate>
         <xmp:CreatorTool>Adobe Illustrator CS6 (Windows)</xmp:CreatorTool>
         <xmp:Thumbnails>
            <rdf:Alt>
               <rdf:li rdf:parseType="Resource">....

Jason,抛开所有保留意见不谈,因为您要求使用regex解决方案,所以这里有一个简单的regex,可以满足您的需求:

<rdf:li xml:lang="x-default">'K[^<]+(?=</rdf:li>)

如何使用:

$str = '<rdf:li xml:lang="x-default">Yuengling Americas Oldest Brewery Huffmans Pub &amp; Grub 60x30 5</rdf:li>';
$regex = '~<rdf:li xml:lang="x-default">'K[^<]+(?=</rdf:li>)~';
if(preg_match($regex,$str,$m)) {
    $myvariable = $m[0];
    echo $myvariable."<br />";
}

输出:

Yuengling Americas Oldest Brewery Huffmans Pub & Grub 60x30 5

它是如何工作的

您会注意到,我们从匹配整个左侧分隔符开始。'K然后告诉引擎从返回的匹配中修剪它。下一个[^<]+匹配任何不是<的字符,以吃掉您想要的文本。为了确保,在匹配之后,我们使用(?=进行前瞻,以确保结束分隔符紧跟在匹配的字符串之后。