2013-07-28 149 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 = '';