我想做一些自定义字符转义,这意味着我希望某些字符前面只有一些特殊字符,前提是它们之前没有特殊字符。我假设我需要一个正则表达式替换。实现这一目标的最简单方法是什么?我尝试了一些带有负面看后断言的东西,结果却什么都没有。
编辑:想象一下,我希望abc
个字符中的\
字符转义为debby
,因此de\b\by
da\bby
d\a\b\by
([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)
我想制作([A-Za-z]+)\/([A-Za-z]+)\/([A-Za-z]+)
。我想这个例子不是那么有创意,但我相信它解释了我的意思(逃避尚未转义的字符)
EDIT2:嗯,我实际上要做的是转一串
.
到
,
在第一个字符串中,正斜杠是,例如,某种分隔符(我希望以后有更多的分隔符,我还想逃避\
,preg_replace("/(?<!\\)([\/])/", "\\$0", $string);
同时我需要使用$string
来逃避它以将其用作另一种(更简单的)模式。我试过(不确定第二个参数,但这不是我认为的问题)
([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)
其中preg_replace("/(?<!\\\\)[\/]/", "\\\\$0", $string);
为{{1}}。没运气。
希望我现在明白了
解决方案:
方括号中的{{1}}我将字符转义。
答案 0 :(得分:5)
我做了一个易于使用的功能来做到这一点。 它将使用任何字符或字符串转义任何字符集。 如果您打算在将来更改要转义的字符或转义序列,它也会变得简单。
function escapeChars($charsToEscape, $escapeSeq, $string)
{
$charsToEscape = preg_quote($charsToEscape, '/');
$regexSafeEscapeSeq = preg_quote($escapeSeq, '/');
$escapeSeq = preg_replace('/([$\\\\])/', '\\\$1', $escapeSeq);
return(preg_replace('/(?<!'.$regexSafeEscapeSeq.')(['.$charsToEscape.'])/', $escapeSeq.'$1', $string));
}
$ charsToEscape :要转义的角色
$ escapeSeq :转义序列字符/字符串
可以是任何字符或字符串。例如:'/','#','$','$#/','$$$','a','你好'等等。
要使用'\'作为转义序列,请输入'\\'
对于'\\',请输入'\\\\' - 因为php在另一个“\”或“'”之前考虑'\'(如果用单引号定义字符串)或''' (如果使用双引号定义字符串)作为转义序列
$ string :要从中转义字符的字符串
在您的具体情况下,请使用
$string = '([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)';
echo escapeChars('/', '\\', $string);