Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配数量不均匀的转义符号 我需要匹配C++预处理器语句。现在,预处理器语句可能跨越多行: #define foobar \ "something glorious"_Regex_Pcre_Backreference - Fatal编程技术网

Regex 匹配数量不均匀的转义符号 我需要匹配C++预处理器语句。现在,预处理器语句可能跨越多行: #define foobar \ "something glorious"

Regex 匹配数量不均匀的转义符号 我需要匹配C++预处理器语句。现在,预处理器语句可能跨越多行: #define foobar \ "something glorious",regex,pcre,backreference,Regex,Pcre,Backreference,最后一个反斜杠可能会被转义,因此以下结果将分为两行: #define foobar \\ No longer in preprocessor. 问题是如何有效地匹配显式行延拓。我有一个我认为有效的表达方式。基本上,它测试反斜杠的数量是否为奇数。这是正确的吗?能更有效地完成吗 / [^\\] # Something that's not an escape character, followed by … (?<escape>\\*?) # … a

最后一个反斜杠可能会被转义,因此以下结果将分为两行:

#define foobar \\
No longer in preprocessor.
问题是如何有效地匹配显式行延拓。我有一个我认为有效的表达方式。基本上,它测试反斜杠的数量是否为奇数。这是正确的吗?能更有效地完成吗

/
    [^\\]           # Something that's not an escape character, followed by …
    (?<escape>\\*?) # … any number of escapes, …
    (?P=escape)     # … twice (i.e. an even number).
    \\ \n           # Finally, a backslash and newline.
/x
/
[^\\\]#非转义字符,后跟…
(?\\*?)\\#…任意数量的逃逸…
(?P=逃逸)#…两次(即偶数)。
\\\n#最后是反斜杠和换行符。
/x

(我使用的是PHP,所以PCRE规则适用,但我希望能用任何Regex方言回答。)

我认为你让它变得比需要的更难了。试试这个:

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
/

(?要匹配整个预处理器语句还是只匹配显式行继续?只匹配显式行继续。原因很复杂;基本上,我使用的状态机使用正则表达式进行转换,并且我已经处于表示预处理指令的状态。我现在需要防止通过使用显式的行继续符,避免机器在行尾过早地离开状态。我需要正则表达式来使用它。这正是我要建议的。+1Man,这太明显了。非常感谢你让我明白过来。