PHP正则表达式动态字符串

PHP正则表达式动态字符串,php,regex,Php,Regex,这是我要从中提取的html内容的一部分: <div class="sms-separator"></div> <div class="wallpaper-ads-right"> <b>Wallpaper:</b> Rayman Legends Game sms<br /> <b>Categories: </b> <a href="/games-desktop-wal

这是我要从中提取的html内容的一部分:

<div class="sms-separator"></div>
<div class="wallpaper-ads-right">
  <b>Wallpaper:</b> 
     Rayman Legends Game sms<br />
  <b>Categories: </b>
     <a href="/games-desktop-wallpapers.html" title="Games wallpapers"> Games</a>
  <br /><b>

壁纸:
雷曼传奇游戏短信
类别:
我需要的是让文本在页面上的'游戏'的地方刷新它会像

<div class="sms-separator"></div>
 <div class="wallpaper-ads-right">
    <b>Wallpaper:</b> 
      Souya ssss<br />
    <b>Categories: </b>
      <a href="/soutss-tourguides" title="Tour"> Tourist</a><br /><b>

壁纸:
苏亚ssss
类别:
现在从上面的内容我想刮“游客”

问题是a href和title标记之前有动态内容,它们随页面而异,因此如何将其放入正则表达式中?


<?php
while ($line = fgets(STDIN))
    if (preg_match('?<a href=".*" title=".*">(.*)</a>?', $line, $match))
        echo $match[1], "\n";
?>
说明 此表达式将捕获节的标题以及每个链接的href&title。我将其保留为多行表达式,以帮助提高可读性。多行正则表达式确实需要
x
ignorewhitespaceinpattern选项

<b>[\w\s]+:\s*<\/b>.*?
<a\b(?=\s)
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref=('[^']*'|"[^"]*"|[^'"][^\s>]*))
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\stitle=('[^']*'|"[^"]*"|[^'"][^\s>]*))
代码

<?php
$sourcestring="your source string";
preg_match_all('/<b>([\w\s]+):\s*<\/b>[\s\r\n]*?
<a\b(?=\s)
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\stitle=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

换句话说,您需要紧跟在
类别之后的
href
标记的内容:
?为什么不使用真正的解析器来处理这类DOM?使用regexpes解析html是。使用正则表达式解析html是。还有更稳健的解决方案。您是否愿意接受这些内容?您可能需要这样做:如果不知道这些值如何变化,也不知道具体的目标(是包含href/title属性的内容还是属性本身),就不可能回答这个问题。
<?php
$sourcestring="your source string";
preg_match_all('/<b>([\w\s]+):\s*<\/b>[\s\r\n]*?
<a\b(?=\s)
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\stitle=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*))/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
$matches Array:
(
    [0] => Array
        (
            [0] => <b>Categories: </b>
     <a
            [1] => <b>Categories: </b>
      <a
        )

    [1] => Array
        (
            [0] => Categories
            [1] => Categories
        )

    [2] => Array
        (
            [0] => "/games-desktop-wallpapers.html"
            [1] => "/soutss-tourguides"
        )

    [3] => Array
        (
            [0] => "Games wallpapers"
            [1] => "Tour"
        )

)