2013-05-03 77 views
0

我想下一個表達式在PHP搭配:RegExp的混亂行爲

preg_match('#<head>([\s\S]*)</head>#' , $this -> $html_file_content , $match); 

沒有成功。

$this -> $html_file_content包含有效的HTML代碼和<head>塊不是空的。

這個正則表達式在JavaScript中工作得很好。

我已經嘗試過未來的變化:

#<head>([.\s\S]*)</head># 
#<head>([.\s\S]+)</head># 
#<head>([\s\S]*)<\/head># 
#<head>([\s\S]+)<\/head># 

在JavaScript中它們都工作得很好。我無法弄清楚,爲什麼PHP中沒有匹配。

你們能幫我處理嗎?

+0

請也張貼的價值'$此 - > $ html_file_content' – Ejaz 2013-05-03 21:37:11

+1

籠統的回答:你不應該使用正則表達式來處理與HTML。 – 2013-05-03 21:37:11

+0

'var_dump($ match);'給你什麼?你可以考慮在最後一個'#'之後加上'm'使它與多行匹配。 – Jon 2013-05-03 21:37:42

回答

1

我無法重現此,所以我的猜測是,$this -> $html_file_content應該

$this -> html_file_content 

在不工作的情況下,可能與SimpleXML嘗試假設的內容都能很好地形成。

$html = new SimpleXMLElement($html_file_content); 
$head = "" . $html->head; 

的「你不應該使用正則表達式解析HTML」共同的答案是錯誤的。據我所知,你並不是想要HTML;你只是想從已知的分隔符中提取一個字符串值。沒有人會說如果分隔符是[head]...[/head]

+0

其實,你的猜測是正確的。寫了一整天之後,我看不到這樣的錯誤......'$'符號不應該在那裏。 – 2013-05-03 21:48:15

0

你說只能在礦石上有更多的空間元素,但是你需要有任何文本包括空格試試這個(。*?)我沒有嘗試但是我希望這是正確的

/(.*)</HEAD>/

+0

'.'不會與沒有's'修飾符的換行符匹配 – 2013-05-03 21:50:29

+0

事實上,'[\ s \ S] *'匹配所有字符,包括間隔符 – 2013-05-03 21:52:50