在转换之前需要检查int是否是单个单词

时间:2013-12-18 09:49:51

标签: regex perl

我将int转换为C文件中的int32_t。

检查它是否是int而不是任何单词我将“int”(int之后的一个空格)转换为“int32_t”

我的代码

open(FILE, $input) or die $!;
my @lines = <FILE>;

foreach(@lines) {   
        $_ =~ s/int /int32_t /g;    # int to int32_t
        print $_;
}

如果输入C文件的行为

print abcd;

然后它也会转换为print32_t。

我如何排除此类案件。这意味着我需要检查一些字母是否在'int'之前,或者我需要检查int是否是一个单词

1 个答案:

答案 0 :(得分:4)

在正则表达式中对字边界使用\b零宽度断言。

foreach (@lines) {   
        s/\bint\b/int32_t/g;    # int to int32_t
        print;
}

Perlre就像这样描述:

  

单词边界(\b)是具有\w的两个字符之间的点   在它的一边和另一边的\W(按任意顺序),   从头的开始和结束计算虚构的字符   字符串匹配\W。 (在字符类\b中表示   退格而不是单词边界,正如通常所做的那样   双引号字符串。)