2013-12-18 52 views
1

我将int转换为int32_t在C文件中。需要检查int是否是一个单词之前转换

要检查其是否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是否是一个单词

回答

4

在您的regex中使用\b零宽度断言用于单词边界。

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

Perlre描述它们是这样的:

词边界(\b)是两个字符之间的点,其具有在其一侧上的\w 和在它的另一侧上的\W (以任一顺序), 将 字符串的开始和结尾处的虚数字符计数为匹配\W。 (在字符类\b代表 退格,而不是一个单词边界,只是因为它通常在任何 双引号字符串一样。)

+0

感谢。正常工作 –

+1

@ Ad-vic:我已经在你之前的问题中解释过了。请阅读你所得到的答案,因为人们正在用自己的个人时间来帮助你。 – Borodin

相关问题