在解析过程中将`*`粘贴到最近的下一个单词

时间:2013-06-05 11:38:51

标签: regex perl parsing

我在文中有以下一行:

int* a, b;

预期结果是:

int *a, b;

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

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

不幸的是,结果如下:

int*a, b;

正则表达式有什么问题?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

只需改变:

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

由:

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

\s在替换部分无效。

答案 2 :(得分:-1)

试试这个。

$line =~ s/(\S)\*(?=\s+)\s*/$1 \*/;