2009-01-27 112 views
0

好吧,所以我有這個正則表達式,我創建它,它在RegexBuddy中正常工作,但不是當我加載到PHP。下面是它的一個例子。preg_match工作在regexbuddy,而不是在php

使用使用RegexBuddy我可以這樣得到它的工作原理:

\[code\](.*)\[/code\] 

和檢查點匹配換行符,我加的是不區分大小寫,但它的工作原理是一條道路。

這裏是PHP:

$q = "[code]<div>html code to display on screen</div>[/code]"; 

$pattern = '/\[code\](.*)\[/code\]/si'; 

$m = preg_match($pattern, $q, $code); 

所以你可以看到我使用[代碼] [/代碼],然後一旦我可以在其上提取此我將運行ヶ輛()來顯示,而不是渲染html代碼。

回答

2

您的模式中包含正斜槓(/ code)。要麼逃避它或用別的東西劃定你的模式(我更喜歡!)。

1

那是因爲你沒有逃脫收盤標記/

逃離反斜槓不會傷害之一:

$pattern = "/\\[code\\](.*)\\[\\/code\\]/si"; 

PHP您可以選擇任意字符作爲分隔符正則表達式,所以我會經常使用一個不在正則表達式中使用的字符,如@

$pattern = "@\\[code\\](.*)\\[/code\\]@si"; 
-1

你一定要逃逸/代碼斜槓

$pattern = '/\[code\](.*)\[\/code\]/si'; 

而且,實現比賽都存儲在$代碼,而不是$ M

編輯:毆打是:對

+0

yup $ m只是調試的一部分,以瞭解它是真是假 – 2009-01-27 05:09:17

0

這工作:

$pattern = '/\[code\](.*)\[\/code\]/si'; 
2

當您將正則表達式從RegexBuddy傳輸到PHP時,請在使用選項卡上生成源代碼片段,或單擊頂部工具欄上的複製按鈕,然後選擇複製爲PHP preg字符串。然後,RegexBuddy將自動添加PHP所需的分隔符和標誌,而不會留下任何未轉義的內容。

相關問題