我有一个文本文件,我想读取MySQL数据库中的所有行。为此,我写了一个perl脚本。
某些字符 - 主要是'
和\
- 需要进行转义。但也存在这些字符已被转义的行。
如何检测角色是否已经被转义,如果没有,如何逃脱?我需要一种正则表达式,它匹配'
但不匹配\'
或\
而不匹配\\
。
答案 0 :(得分:0)
这似乎正在做,你要求的是什么。搜索
((?<!\\)\\(?![\\'])|(?<!\\)')
并替换为
\\\1
查看实际操作:RegEx 101。
它结合了两个搜索表达式,一个用于反斜杠,另一个用于单引号。他们每个人都环顾四周以确定,它还不是(一部分)转义序列。
然而,它离开了两个以上反斜杠的序列。 - 对于偶数个人来说应该没问题(考虑到他们逃脱了)。但不平衡的......如果需要调整/进一步详细说明,请发表评论。
答案 1 :(得分:0)
这会按照你的要求行事。本质上,它按照长度的递减顺序搜索所有四个字符串,以便它首先找到转义序列,然后只转义单个字符,使已经转义的匹配保持不变
ldr w0, [%1];
mov %0, w0;
use strict;
use warnings;
use 5.010;
my $s = q{which matches ' but not \' or \ and not \\\\.};
say $s;
$s =~ s/(\\\\|\\')|(\\|')/$1 ? $1 : "\\$2"/eg;
say $s;