用另一个角色逃脱一组角色

时间:2013-08-08 19:56:58

标签: php regex

我想做一些自定义字符转义,这意味着我希望某些字符前面只有一些特殊字符,前提是它们之前没有特殊字符。我假设我需要一个正则表达式替换。实现这一目标的最简单方法是什么?我尝试了一些带有负面看后断言的东西,结果却什么都没有。

编辑:想象一下,我希望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}}我将字符转义。

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 :要转义的角色

  • 'a'逃脱'a'
  • 'abc'逃脱'a','b'和'c'

$ escapeSeq :转义序列字符/字符串

  • 可以是任何字符或字符串。例如:'/','#','$','$#/','$$$','a','你好'等等。

  • 要使用'\'作为转义序列,请输入'\\'

  • 对于'\\',请输入'\\\\' - 因为php在另一个“\”或“'”之前考虑'\'(如果用单引号定义字符串)或''' (如果使用双引号定义字符串)作为转义序列

$ string :要从中转义字符的字符串

在您的具体情况下,请使用

$string = '([A-Za-z]+)/([A-Za-z]+)/([A-Za-z]+)';    
echo escapeChars('/', '\\', $string);