倾斜牙签综合征

Multi tool use
Multi tool use




倾斜牙签综合征leaning toothpick syndrome,LTS)是指在计算机程序设计中,由于表达式包含了大量的转义字符而使代码变得难以阅读,通常是指反斜线("")开头的转义字符序列。


Perl语言的官方文档[1]引入了这一术语,用于描述Unix风格的正则表达式中大量的前向斜线。


LTS出现在许多程序设计语言与许多环境中,包括用于匹配统一资源定位符(URI)的模式(Pattern (software)),以及输出被引用文本的程序中,许多自产生程式属于后一类。




目录






  • 1 模式的例子


  • 2 被引用文本的例子


  • 3 其它语言


    • 3.1 C#


    • 3.2 C++


    • 3.3 Python


    • 3.4 Scala


    • 3.5 Sed




  • 4 参见


  • 5 参考文献





模式的例子


下述Perl正则表达式用来匹配在某个FTP服务器的pub目录下的文档的URI:


  m/ftp://[^/]*/pub//

Perl通过允许正则表达式使用其它分界符来解决倾斜牙签综合症。例如,下述三个正则表达式均等价于上例:


 m{ftp://[^/]*/pub/}
m#ftp://[^/]*/pub/#
m!ftp://[^/]*/pub/!


被引用文本的例子


以下Perl样例程序用于输出HTML链接的文本,其中URL与显示文本分别存于变量$url$text之中,代码如下:


 print "<a href="$url">$text</a>";

注意上述程序中使用反斜线转义双引号。如果使用单引号括起上述字符串表达式,在Perl中是不可行的,因为Perl对单引号字符串不执行变量展开:


 print '<a href="$url">$text</a>'

在许多语言中使用printf函数是可行的办法(Perl,C,PHP):


 printf("<a href="%s">%s</a>", $url, $text);

在Perl中使用qq即可用任意字符代替双引号:


 print qq{<a href="$url">$text</a>};
print qq|<a href="$url">$text</a>|;
print qq(<a href="$url">$text</a>);

Here文档特别适合于多行文档;但是,Here文档不能够正确的缩进。这样的Perl示例为:


 print <<HERE_IT_ENDS;
<a href="$url">$text</a>
HERE_IT_ENDS


其它语言



C#


C#语言处理LTS的方法是在字符串开始的引号之前加上“@”这个字符,例如:


string filePath = @"C:FooBar.txt"

而不是这样:


string filePath = "C:\Foo\Bar.txt"


C++


C++11增加了原始字符串:


 std::string filePath = R"(C:FooBar.txt)";

如果字符串包含了)"这两个字符的组合,可选别的分界符,如d,例如:


 std::regex re{ R"d(s/"([^"]*)"/'1'/g)d" };


Python


Python也有原始字符串的机制,在字符串前加上“r”即可:


 filePath = r"C:FooBar.txt"


Scala


Scala语言可用三个引号以避免转义混淆:


 val filePath = """C:FooBar.txt"""
val pubPattern = """ftp://[^/]*/pub/"""r

三引号也可用于多行字符串,例如:


 val text = """First line,
second line."""


Sed


Sed正则表达式,尤其当使用“s”操作符时,具有和Perl类似的问题——缺省分界符是“/”,但是其它分界符也可以使用——缺省是s/regexp/replacement/,但是s,regexp,replacement,效果是一样的。例如,为了匹配上述Perl例子之中的"pub"目录并替换为"foo",使用斜线的缺省形式是:


s/ftp://[^/]*/pub//foo/

使用(',')分界符的形式为:


s,ftp://[^/]*/pub/,foo,


参见



  • 字符串

  • 正则表达式



参考文献





  1. ^ perlop - perldoc.perl.org









O,WXRD1R,yQNAmnPw,E,a2JOWBowZ0QV Xxt116T,9pAM5xezkRD 3G7YCz3,7crQ
SkQ,dVkpkfU5zZYL6mt4svmmIP,4Rh6IXLMMVCxqgNbUvjMPawrxi80Ncf4 fjG5X ehDGCMeDo1w5hUvzyVgP 6fh9HrRM5M3LH,K3

Popular posts from this blog

How to pass form data using jquery Ajax to insert data in database?

Guess what letter conforming each word

Run scheduled task as local user group (not BUILTIN)