0

为了发送查询以使用 JDBC 执行,我必须删除 /* 和 */ 之间的文本

/*==============================================================**/
/* 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);
4

3 回答 3

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
于 2013-07-28T11:58:28.233 回答
0

您需要转义字符/*因为它们具有特殊含义,所以您只在一个地方完成了它。下面的代码应该可以解决问题

 preg_replace("^/\/\*[^*\/]+\*\/$/","", $sql);
于 2013-07-28T11:47:30.883 回答
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 = '';
于 2013-08-04T14:44:00.647 回答