2013-07-28 185 views
0

之間的文本要發送的查詢使用JDBC來執行我不得不刪除texte之間/ *和*/刪除評論

/*==============================================================**/ 
/* Description : ... */ 
/* Author : rgosse             */ 
/* Date de création du script : 25/04/2013     */ 
/*==============================================================*/ 

/*==============================================================*/ 
/* PISTE D'AUDIT            */ 
/*==============================================================*/ 
declare @username varchar(25) 
declare @dateNow datetime 
declare @contact_id numeric 
... 

可我的preg_replace辦呢?

成纔像

preg_replace("/[/*][^*\/]+\[*/]/","", $sql); 
+0

你看了關於正則表達式的任何教程還是你只是把隨機字符,並期望它的工作? – zerkms

回答

0

你需要逃避像/*字符,因爲他們有特殊的意義,你只有在一個地方做了。下面的代碼應該做的伎倆

preg_replace("^/\/\*[^*\/]+\*\/$/","", $sql); 
+0

*一般*'/'沒有任何特殊含義。 – zerkms

+0

你可以從'[^ \ * \ /]'中刪除'*',''''''''''''''''''' – Pietu1998

+0

@zerkms它標記着開始和結束 – DevZer0

2

您可以使用此模式

$code = preg_replace('~/\*(?>[^*]++|\*++(?!/))*\*++/~', '', $code); 

詳情:

~    # delimiter (instead of /, avoid to escape all the/in the pattern) 
/   # literal/
\*    # literal * (must be escaped since it's a special character) 
(?>   # open a non capturing group (atomic) 
    [^*]++  # all characters except * one or more times 
    |   # OR 
    \*++(?!/) # * one or more times not followed by/
)*    # repeat the group zero or more times (here * is a quantifier) 
\*++   # * one or more times 
/   # literal/
~    # pattern delimiter 
0

要更換,我們需要匹配的開始和結束的評論之間的文本評論然後替換那些之間的元素。由於*是一個量化因子,我們需要將其轉義爲\*,因此其自然行爲不會在PHP中引發錯誤。

注意:在下面,我假設均衡的評論標記。

$code = " 
/*==============================================================**/ 
/* Description : ... */ 
/* Author : rgosse             */ 
/* Date de création du script : 25/04/2013     */ 
/*==============================================================*/ 

/*==============================================================*/ 
/* PISTE D'AUDIT            */ 
/*==============================================================*/ 
declare @username varchar(25) 
declare @dateNow datetime 
declare @contact_id numeric 
"; 

$pattern = "!(/\*).+(\*/)!"; 
$replacement = '/**/'; 

$newCode = preg_replace($pattern,$replacement,$code); 

echo $newCode; 

輸出:

/**/ 
/**/ 
/**/ 
/**/ 
/**/ 

/**/ 
/**/ 
/**/ 
declare @username varchar(25) 
declare @dateNow datetime 
declare @contact_id numeric 

如果你想完全取代所有的意見,做如下改變:

$replacement = '';