PHP匹配数组值

时间:2011-11-16 05:17:00

标签: php regex

我正在开发一个小应用程序来从网址中抓取css。在这里演示: http://grahamthomas.me/temp/scrape/test/get-contents.php?url=http://www.grahamthomas.me

脚本刮擦1.样式表并提取内容2.内联样式3.内联定义的样式表(即@import)

您看到的输出是找到的所有样式的内容。它是2个阵列的输出。一个是选择器,一个是选择器的内容。

因此打印结果来自for循环,将其作为print语句:

echo $selectors[$i] . "{" . $sstyles[$i] . "}<br>";

要点:我正在尝试从已删除的页面输入div,然后打印出它的样式。我已经尝试使用in_array和str_pos来搜索我感兴趣的选择器数组:

  if (strpos($pull, "#work") == true) {
    echo $pull . "<br>";
  }

由于CSS语法,我遇到了问题。上面的循环可以工作,但由于#work可以在其他样式中作为父项引用,因此它也会打印这些“子项”。我只对打印#work风格本身感兴趣。

#body-container #work #thumb-hwy a {  }
#body-container #work #thumb-bjn a {  }
#body-container #work #thumb-wtfc a {  }

我提出的解决方案是:1。分析字符串并确保在我搜索的密钥之后没有任何内容(即接受#work,但不接受#work #next)。或者通过REGEX运行值,这将搜索目标键并确保没有其他CSS样式指示符,只有样式本身。

任何关于如何做到这一点的帮助,或者改进的逻辑思路都值得赞赏!!我正在努力解决这个问题。

2 个答案:

答案 0 :(得分:1)

我在查看其他问题时找到的一个很好的解决方案提供了一个很好的方法来执行negative lookahead,这基本上是你在使用正则表达式时要尝试做的事情。

尝试使用此正则表达式:

/(\#work)(?!\#[\b|\-]+$)/

答案 1 :(得分:0)

如果你想确定你的正则表达式在你正在搜索的东西之后什么都没有,那么首先修剪一些白色空间可能是一个好主意。然后确保搜索词之前或之后没有任何内容使用开头和结尾字符^$。 你应该得到这样的东西。   /^#work$/

使用正则表达式的问题是.以及其他特殊字符。

我认为你最好尝试使用这样的真正的css解析器:https://github.com/sabberworm/PHP-CSS-Parser