正在提取<;标题>;及</标题>;使用PHP
可能的重复项:正在提取<;标题>;及</标题>;使用PHP,php,Php,可能的重复项: 我试图在我的服务器上运行100个不同的html文件,并提取标题以在另一个php文件中使用 供参考: <title>Generic Test Page</title> 通用测试页面 我需要的是一个函数,它将返回字符串“generictestpage”,并将其粘贴到一个全局变量中 我现在所做的只是将文件读入一个名为$lines的数组。对于每个$line作为$line,我正在测试字符串。。。但是如何仅提取>和”,$line)不返回包含两部分的数组
我试图在我的服务器上运行100个不同的html文件,并提取标题以在另一个php文件中使用 供参考:
<title>Generic Test Page</title>
通用测试页面
我需要的是一个函数,它将返回字符串“generictestpage”,并将其粘贴到一个全局变量中
我现在所做的只是将文件读入一个名为$lines的数组。对于每个$line作为$line,我正在测试字符串谢谢 您需要使用类似
你需要使用类似于
您应该使用正则表达式来提取内部部分。更多信息您应该使用正则表达式来提取内部零件。更多信息$line=每行
$pattern ='/<title[^>]*>(.*?)<\/title>/is';
if( preg_match($pattern,$line,$match) )
return trim($match[1]); # your title !
$pattern='/]*>(.*)/is';
if(预匹配($pattern,$line,$match))
返回修剪($match[1])#你的头衔!
或者在整个html上使用该模式并返回匹配项
或者使用斯克尔建议的方法 $line=每行
$pattern ='/<title[^>]*>(.*?)<\/title>/is';
if( preg_match($pattern,$line,$match) )
return trim($match[1]); # your title !
$pattern='/]*>(.*)/is';
if(预匹配($pattern,$line,$match))
返回修剪($match[1])#你的头衔!
或者在整个html上使用该模式并返回匹配项
或者使用斯克尔建议的方法 在这里可以找到一个解决方案-(相关)我很乐意使用preg_match或preg_split,但我无法找出所有额外字符的来源。例如,为什么preg_split(“>”,$line)不返回包含两部分的数组,第一部分在>之前,另一部分在>之后。它一直告诉我它找不到分隔符。呃…好吧,显然我不该那么做。我看到很多抱怨,但为什么不好?你没有试着寻找答案吗?这个问题已经被解决了好几次:可以在这里找到一个解决方案-(相关)我很乐意使用preg_match或preg_split,但我不知道所有额外的字符是从哪里来的。例如,为什么preg_split(“>”,$line)不返回包含两部分的数组,第一部分在>之前,另一部分在>之后。它一直告诉我它找不到分隔符。呃…好吧,显然我不该那么做。我看到很多抱怨,但为什么不好?你没有试着寻找答案吗?这个问题已经被解决了好几次:建议第三方替代实际使用而不是字符串解析的方法:,还有。太棒了!我不知道所有这些选择,所以这给了我一些东西来与我目前使用的进行比较。不客气。另请参见问题下方的相关链接。我了解了DOM编码。非常感谢你的帮助!建议的第三方替代方案实际使用,而不是字符串解析:,和。太棒了!我不知道所有这些选择,所以这给了我一些东西来与我目前使用的进行比较。不客气。另请参见问题下方的相关链接。我了解了DOM编码。非常感谢你的帮助!请你告诉我所有的斜杠、星星和括号是什么意思好吗?您是否需要将$match定义为数组,或者当它作为参数插入时,它是否自动成为数组?当然:*表示零或更多,/是表达式中的一个函数,因此您将\放在前面以接受它(\/),[^>]*=表示获取所有非>(因此在“sdgsdgdg sd..sdgsdgsd”中)将被消除。请查看一些教程:$match只是我为存储“匹配项”的数组指定的名称。您可以在函数中随意命名它:preg_match($pattern,$source,$array WITH RESULTS);在($match=array())之前定义数组总是很好的请参见>当标题全部放在一行时,这是有效的,但当开发人员将其拆分为三行时,代码就中断了。我想我刚刚找到了为什么不使用regex的原因。:-)感谢您给我一个起点,并告诉我一切的含义。你很有帮助。你能举个例子吗?正则表达式可以,但模式可能必须改变。请告诉我所有的斜杠、星星和括号是什么意思?您是否需要将$match定义为数组,或者当它作为参数插入时,它是否自动成为数组?当然:*表示零或更多,/是表达式中的一个函数,因此您将\放在前面以接受它(\/),[^>]*=表示获取所有非>(因此在“sdgsdgdg sd..sdgsdgsd”中)将被消除。请查看一些教程:$match只是我为存储“匹配项”的数组指定的名称。您可以在函数中随意命名它:preg_match($pattern,$source,$array WITH RESULTS);在($match=array())之前定义数组总是很好的请参见>当标题全部放在一行时,这是有效的,但当开发人员将其拆分为三行时,代码就中断了。我想我刚刚找到了为什么不使用regex的原因。:-)感谢您给我一个起点,并告诉我一切的含义。你很有帮助。你能举个例子吗?正则表达式可以,但模式可能必须改变。