问题描述
|
假设我有一个页面要刮掉其中带有“ ice”的单词,我该如何轻松地做到这一点?我看到很多刮板将其分解为源代码,但是我不需要。我只需要一些可以搜索网页上纯文本的内容。
编辑:我基本上需要一些东西来搜索.jpeg并找到整个文件名。 (它是网站上的纯文本,没有隐藏在标签中)
解决方法
符合以下条件的任何单词都是其中带有“ 0”的单词:
/(\\w*)ice(\\w*)/i
(请注意,\\w
也会匹配0-9
和_
。以下结果可能会更好:give5 better)
更新
要匹配文件名(不得包含空格):
/\\S+\\.jpeg/i
例:
<?php
$str = \'Picture of me: 238484534.jpeg and someone else img-of-someone.jpeg here\';
$cnt = preg_match_all(\'/\\S+\\.jpeg/i\',$str,$matches);
print_r($matches);
,1.您是否也想像属性,文本名一样读取HTML标记中的单词?
2.还是只有网页的可见部分?
for#1:解决方案很简单,并且已经在其他答案中提到。
对于#2:
使用PHP DOMDOCUMENT类,并且仅在innerHTML中提取和搜索。
文档在这里:
http://php.net/manual/zh/class.domdocument.php
例如:
PHP DOMDocument剥离HTML标记
,为此需要一些正则表达式。在下面,我使用PCRE http://www.php.net/manual/en/ref.pcre.php和函数preg_match http://www.php.net/manual/en/function.preg-match-all.php
<?php
$html = <<<EOF
<html>
<head>
<title>Test</title>
</head>
<body>List of files:
<ul>
<li>test1.jpeg</li>
<li>test2.jpeg</li>
</ul>
</body>
</html>
EOF;
$matches = array();
$count = preg_match_all(\"([0-9a-zA-Z_-]+\\.jpeg)\",$html,$matches);
if (count($matches) > 1) {
for ($i = 1; $i < count($matches); $i++) {
print \"Filename: {$matches[$i]}\\n\";
}
}
?>
,尝试这个:
preg_match_all(\'/\\w*ice\\w*/\',\'abc icecream lice\',$matches);
print_r($matches);