删除制表符 - perl

时间:2011-09-08 04:14:56

标签: regex perl

我正在使用以下perl表达式从here

中删除标签
$text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge;

我已将我的理解和翻译简化为以下内容(假设标签宽度为四个空格)

$text =~  s/(.*?)\t/'    '/;

但我觉得我已经破坏了爱因斯坦的指示

  

让事情变得尽可能简单,但并不简单。

我正在使用以下输入字符串进行测试。

"\t \t"
"\t\t \t"
"\t\t \t\t \t"
"\t\t \t\t     \t"

有人可以演示一个输入字符串,它会在这两者之间产生不一致的结果吗? (在删除标签的问题空间内)

1 个答案:

答案 0 :(得分:2)

我假设您的第二个简化表达式应该是:

$text =~ s/(.*?)\t/$1    /g;
# four spaces -------^^^^

并且$g_tab_width是四;没有别的东西对我来说有意义,所以我会危险地生活,并认为事情应该是有意义的。

鉴于此,几乎任何带有标签的东西都会产生不同的结果。例如:

"where\tis pancakes house?"

产生以下结果:

"Where   is pancakes house?"   # Long method.
"Where    is pancakes house?"  # Simplified method.

实时版:http://ideone.com/LbnNx

只有当非标签组件的长度都是4 * n时才会产生相同的结果,例如:

"xxxx\tyyyy\tzzzz"

实时版:http://ideone.com/Kvp3l