在定界符之间匹配转义字符和转义字符本身
Match escaped character and escaping character itself between delimiters
问题
假设您有一个字符串,其中包含一个或多个随机字符序列或由特定字符分隔的单词,比方说单引号。不是定界符的单引号由反斜杠转义。
例如:
字符串
'word' 'word word' 'word\'word' '\' '\' '\''
需要捕获
- 'word'
- 'word word'
- '字\'word'
- '\'
- '\\'
- '\''
基本上必须捕获非转义单引号之间的每个字符序列。
困难
捕获#4 和#5 都有一个单引号定界符被反斜杠转义。事实上,这应该被理解为单引号分隔符之间的反斜杠。
到目前为止,除了#6 之外,我已经能够捕捉到所有内容。我曾经遵循正则表达式:
'((\'[^\s]|[^'])*)'
我觉得这很奇怪,因为我认为这会捕获不包含单引号的单引号之间的每个字符序列,但转义单引号后跟非空白字符除外。所以我不知道为什么 #6 没有被这个表达式捕获。
'(?:[^'\]|\'(?!\s))*'|'\+'
您可以使用这个 instead.See 演示。
基本上你需要匹配所有不是引号的字符或任何用反斜杠转义的字符(包括单引号或反斜杠本身):
'((?:[^'\]|\.)*)'
为了使这个模式高效,你可以这样重写它(没有交替):
'([^\']*(?:\.[^\']*)*)'
问题
假设您有一个字符串,其中包含一个或多个随机字符序列或由特定字符分隔的单词,比方说单引号。不是定界符的单引号由反斜杠转义。
例如:
字符串
'word' 'word word' 'word\'word' '\' '\' '\''
需要捕获
- 'word'
- 'word word'
- '字\'word'
- '\'
- '\\'
- '\''
基本上必须捕获非转义单引号之间的每个字符序列。
困难
捕获#4 和#5 都有一个单引号定界符被反斜杠转义。事实上,这应该被理解为单引号分隔符之间的反斜杠。
到目前为止,除了#6 之外,我已经能够捕捉到所有内容。我曾经遵循正则表达式:
'((\'[^\s]|[^'])*)'
我觉得这很奇怪,因为我认为这会捕获不包含单引号的单引号之间的每个字符序列,但转义单引号后跟非空白字符除外。所以我不知道为什么 #6 没有被这个表达式捕获。
'(?:[^'\]|\'(?!\s))*'|'\+'
您可以使用这个 instead.See 演示。
基本上你需要匹配所有不是引号的字符或任何用反斜杠转义的字符(包括单引号或反斜杠本身):
'((?:[^'\]|\.)*)'
为了使这个模式高效,你可以这样重写它(没有交替):
'([^\']*(?:\.[^\']*)*)'