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

JQK*_*QKP 0 regex perl

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

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

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

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

Avi*_*Raj 5

'(\\.|[^'])*'将匹配转义报价或逃脱像任何特殊字符'\'\"',其中'[^']*'将不匹配'\'',这是最主要的区别.

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

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