如何删除字符串中的相关字符,如果它还没有?

时间:2015-08-22 01:15:24

标签: regex perl

我有一个文本文件,我想读取MySQL数据库中的所有行。为此,我写了一个perl脚本。

某些字符 - 主要是'\ - 需要进行转义。但也存在这些字符已被转义的行。

如何检测角色是否已经被转义,如果没有,如何逃脱?我需要一种正则表达式,它匹配'但不匹配\'\而不匹配\\

2 个答案:

答案 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;