2016-07-08 36 views
2

不工作,我有一個正則表達式,我在regeprregex101這正則表達式是真實的,但在本地主機

測試,但它不是在本地主機的工作!(在7.0.6我的XAMPP版本) 我的代碼下面的代碼

中將Html.HTML

{block content 
ddggggggggggggggg 
/endcontent} 

file.php

$pt="~\{\s*block\s*-?\s*(\w+)[\s+|\~](.*)\/end\1}~s"; 
#Blocks# 
preg_match($pt, file_get_contents('html.html'),$match1); 
print_r($match1);exit; 

我猜問題是\ 1,因爲下面的代碼是正常工作

$pt="~\{\s*block\s*-?\s*(\w+)[\s+|\~](.*)\/endcontent}~s"; 
#Blocks# 
preg_match($pt, self::$tmp,$match1); 
print_r($match1);exit; 

爲什麼第一個代碼是在我的本地主機不工作? 你知道這是什麼問題嗎?

中將Html.HTML文件也不是一成不變的,也許不同勢,我需要一個動態的正則表達式,如第一正則表達式

+0

使用單引號。如果你想匹配* 1+空格*或*''〜',我還認爲你需要'()'在'\ s + | \〜'周圍。嘗試'$ pt ='〜\ {\ s * block \ s * - ?\ s *(\ w +)(\ s + | \〜)(。*)\/end \ 1}〜s';' –

+0

vote。完美!請發表您的回答 –

回答

2

你需要使用一個單引號的文字,使\1被視爲反向引用(否則,你需要加倍逃避它)。

此外,要匹配1+空格或~,您需要使用分組帶括號,而不是字符類。請注意,[\s+|\~]匹配1個字符:空格,+,|~,我懷疑你實際上是否想要這種行爲。

使用

$s = "{block content\nddggggggggggggggg\n/endcontent}"; 
$pt='~\{\s*block\s*-?\s*(\w+)(\s+|\~)(.*)\/end\1}~s'; 
preg_match($pt, $s, $match1); 
print_r($match1); 

看到周圍的正則表達式的IDEONE demo

+1

感謝!你已經幫了我 –