倾斜牙签综合征

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

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

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

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

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

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

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

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

  print "$text";

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

  print '$text'

在许多语言中使用printf函数是可行的办法（Perl，C，PHP）：

  printf("%s", $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:\Foo\Bar.txt"

而不是这样：

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

C++

C++11增加了原始字符串:
 std::string filePath = R"(C:\Foo\Bar.txt)";

如果字符串包含了)"这两个字符的组合，可选别的分界符，如d，例如： 
 std::regex re{ R"d(s/"\([^"]*\)"/'\1'/g)d" };

Python

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

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

Scala

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

 val filePath = """C:\Foo\Bar.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,

参见
字符串
正则表达式

参考文献

Category:程序设计语言
Category:Perl
Category:正则表达式