2013-03-18 59 views
0

我試圖用|title|Page title|替換標題標記爲<title>Page Title</title>,使用這個正則表達式。但作爲一個完整的愛好者,它不是去好..Php標題正則表達式

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

我很想知道如何解決它,更重要的是,我做錯了什麼,爲什麼這是錯的。

+4

你的角色組不會不包含空間? – 2013-03-18 19:46:42

+3

你可以'爆炸'('|',$ string)' – Tchoupi 2013-03-18 19:48:13

+0

沒有空間也行不通,我在accual webserver上實際使用了「test」,它也沒有吞下去。警告:preg_replace()[function.preg-replace]:沒有在D:\ www \ core \ classes \ system.class.php中找到的結束匹配分隔符'>' 37 – Hultin 2013-03-18 19:51:37

回答

1

你幾乎得到它:

  • 你應該逃脫|字符,因爲它們在 正則表達式中有特殊含義,並且您將它用作普通字符。
  • 你應該空格字符添加到您的搜索組

    $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> 
    

見工作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); 
} 
+0

這樣的作品,權利,直到我嘗試將其插入到我的系統類是這樣的: \t公共職能render_template_basic($數據){ \t \t $數據=修剪($的數據); \t \t $ regular_expressions =陣列( \t \t \t '/ \ |標題\ |([A-ZA-Z0-9_] {1,})\ | /'=> ' $ 1', \t \t) ; \t \t的foreach($ regular_expressions爲$正則表達式){ \t \t \t $數據= preg_replace函數(正則表達式$ [0],$正則表達式[1],$數據); \t \t} \t \t return $ data; \t} 然後我得到一個「Warning:preg_replace()[function.preg-replace]:分隔符不能是D:\ www \ core \ classes \ system.class.php中第36行的字母數字或反斜槓」錯誤 – Hultin 2013-03-18 20:24:30

+0

抱歉,雙重發帖。無法編輯我之前的評論。 當我打印$ regexp [0]時,打印出「<」,當我打印$ regexp [1]時打印出「t」,這裏究竟發生了什麼? 我從來沒有遇到過這種性質的問題,它很奇怪,因爲發生了一些不被要求的事情! – Hultin 2013-03-18 20:37:21

+0

我可以看到你做錯了什麼,將它添加到我的答案.. – Nelson 2013-03-18 20:46:20

0

繼承人一個小功能我想出了一段時間,當用戶通過我的服務提交鏈接時,基本上刮掉了頁面的標題。該功能所做的是獲取提供的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)); 
0
<?php 
    $s = "|title|Page title|"; 

    $s = preg_replace('/^\|title\|([^\|]+)\|/', "<title>$1</title>", $s); 

    echo $s; 
?>