为什么要测试匹配\。如果测试匹配除特定字符之外的任何东西?

时间:2015-08-10 17:44:53

标签: regex perl

http://perldoc.perl.org/Text/Balanced.html说:

  

extract_delimited函数形式化了从字符串开头提取单字符分隔子字符串的常用习惯用法。例如,要提取单引号分隔的字符串,通常使用以下代码:

($remainder = $text) =~ s/\A('(\\.|[^'])*')//s;
$extracted = $1;

\\.'\.')似乎被([^'])*覆盖。为什么\\.|在那里?为什么不使用s/\A('[^']*')//s

1 个答案:

答案 0 :(得分:5)

'(\\.|[^'])*'会匹配转义引用或转义任何特殊字符,例如'\'\"' '[^']*'赢得匹配'\'',这是主要区别

'(\\.|[^'])*'

  • '匹配单引号。
  • \\.匹配任何转义字符。如果没有反斜杠,则控件转移到否定的字符类[^']。所以这会贪婪地匹配所有转义的角色。
  • '匹配单引号。