匹配转义字符并在分隔符之间转义字符本身

时间:2015-09-02 08:21:15

标签: regex escaping delimiter

问题

假设您有一个字符串,其中包含一个或多个随机字符序列或由某个字符分隔的单词,请举一个引号。单引号不是分隔符,用反斜杠转义。

例如:

字符串

  

'word''单词''单词''单词''\''\\''\''

期望捕获

  1. '字'
  2. '单词'
  3. '字\' 字“
  4. '\'
  5. '\\'
  6. '\''
  7. 基本上,必须捕获非转义单引号之间的每个字符序列。

    的难点

    捕获#4和#5都有一个单引号分隔符被反斜杠转义。实际上,这应该只是单引号分隔符之间的反斜杠。

    到目前为止,我已经能够捕获除#6之外的所有内容。我曾经跟随正则表达式:

      

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

    我觉得这很奇怪,因为我认为这会捕获不包含单引号的单引号之间的每个字符序列,除了转义的单引号后跟非空白字符。因此,我不知道为什么#6没有被这个表达式捕获。

2 个答案:

答案 0 :(得分:0)

'(?:[^'\\]|\\'(?!\s))*'|'\\+'

您可以改用它。参见演示。

https://regex101.com/r/sS2dM8/35

答案 1 :(得分:0)

基本上你需要匹配所有非引号的字符或任何使用反斜杠转义的字符(包括单引号或反斜杠本身):

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

为了使这个模式有效,你可以像这样重写它(没有交替):

'([^\\']*(?:\\.[^\\']*)*)'