Php标题正则表达式


Php title regular expression

我试图用这个正则表达式替换从|title|Page title|<title>Page Title</title>的标题标签。但作为一个完全的业余爱好者,它并没有很好……

'^|title|^[a-zA-Z0-9_]{1,}|$' => '<title>$1</title>'

我想知道如何修复它,更重要的是,我做错了什么,为什么是错的。

你就快成功了:

  • 您应该转义|字符,因为它们在
  • 你应该添加空格字符到你的搜索组

    $string = '|title|Page title|';
    $pattern = '/'|title'|([a-zA-Z0-9_ ]{1,})'|/';
    $replacement = '<title>$1</title>';
    echo preg_replace($pattern, $replacement, $string); //echoes <title>Page title</title>
    

参见working demo

OP在评论中发布了一些错误的代码,试试这个版本:

$regular_expressions = array( array( '/'|title'|([a-zA-Z0-9_ ]{1,})'|/' , '<title>$1</title>' )); 
foreach($regular_expressions as $regexp){
   $data = preg_replace($regexp[0], $regexp[1], $data); 
} 

这是我不久前想出的一个小函数,当用户通过我的服务提交链接时,它基本上可以抓取页面的标题。这个函数的作用是获取所提供URL的内容。寻找一个标题标签,如果找到,得到标题标签之间的内容,并转储它的结果。只要稍加调整,我相信无论你做什么,你都可以使用替代方法,并使其满足你的需要。所以这更多的是一个起点,而不是一个答案,但总的来说,我希望它在某种程度上有所帮助。

$url = 'http://www.chrishacia.com';
function get_page_title($url){
    if( !($data = file_get_contents($url)) ) return false;
    if( preg_match("#<title>(.+)<'/title>#iU", $data, $t))  {
        return trim($t[1]);
    } else {
        return false;
    }
}
var_dump(get_page_title($url));
<?php
    $s = "|title|Page title|";
    $s = preg_replace('/^'|title'|([^'|]+)'|/', "<title>$1</title>", $s);
    echo $s;
?>