-1

我在文本中有以下行:

int* a, b;

预期结果是:

int *a, b;

以下Perl代码应该产生预期的行:

$line =~ s#\s*\*\s*#\s\*#g;

不幸的是,结果如下:

int*a, b;

正则表达式有什么问题?

4

3 回答 3

6

我认为您\s不能替代使用;它在搜索中表示一个字符类(空格,包括空格、制表符等),但一个类在替换中没有意义。使用正常的空间。

于 2013-06-05T11:43:36.970 回答
3

只是改变:

$line =~ s#\s*\*\s*#\s\*#g;

经过:

$line =~ s#\s*\*\s*# \*#g;

\s在替换部分无效。

于 2013-06-05T11:43:31.103 回答
-1

也试试这个。

$line =~ s/(\S)\*(?=\s+)\s*/$1 \*/;
于 2013-06-05T11:51:51.027 回答