只有当它们后面没有跟 n 时,如何替换所有出现的 \?
How to replace all occurrences of \ only if they are not followed by n?
似乎是一项相对简单的任务,让我陷入了一个 PHP 应用程序。我有一个字符串,里面有一堆 \n
。那些很好,需要留在那里。但是,也有字符 \
和我需要替换或删除的字符的单次出现,我们只说空字符而不删除后面跟 n
.
的字符
我想出的最好办法是先将所有 \n
替换为其他东西,一些奇怪的字符,然后将剩余的 \
替换为空的 space,然后再转换回\n
的奇怪字符。然而,这似乎是在浪费时间和资源,此外,没有什么能保证我会找到足够奇怪的字符,而这些字符在字符串的其余部分中永远不会遇到...
有什么建议吗?
你应该能够用否定的先行断言来做到这一点:
\(?!n)
\
寻找反斜杠,(?!n)
断言下一个字符不是n,但不匹配字符。
要在 PHP 中使用它:
$text = 'foo\nbar\nb\az\n';
$newtext = preg_replace('/\\(?!n)/', '', $text);
你需要
$s = preg_replace('~\\(?!n)~', '', $s);
参见PHP demo:
$s = '\n \t \';
$s = preg_replace('~\\(?!n)~', '', $s);
echo $s; // => \n t
我们需要 4 个反斜杠将 2 个文字反斜杠传递给正则表达式引擎以匹配输入字符串中的 1 个文字反斜杠。 (?!n)
是一个 负先行 ,它使反斜杠的所有匹配都失败,反斜杠紧随其后 n
.
似乎是一项相对简单的任务,让我陷入了一个 PHP 应用程序。我有一个字符串,里面有一堆 \n
。那些很好,需要留在那里。但是,也有字符 \
和我需要替换或删除的字符的单次出现,我们只说空字符而不删除后面跟 n
.
我想出的最好办法是先将所有 \n
替换为其他东西,一些奇怪的字符,然后将剩余的 \
替换为空的 space,然后再转换回\n
的奇怪字符。然而,这似乎是在浪费时间和资源,此外,没有什么能保证我会找到足够奇怪的字符,而这些字符在字符串的其余部分中永远不会遇到...
有什么建议吗?
你应该能够用否定的先行断言来做到这一点:
\(?!n)
\
寻找反斜杠,(?!n)
断言下一个字符不是n,但不匹配字符。
要在 PHP 中使用它:
$text = 'foo\nbar\nb\az\n';
$newtext = preg_replace('/\\(?!n)/', '', $text);
你需要
$s = preg_replace('~\\(?!n)~', '', $s);
参见PHP demo:
$s = '\n \t \';
$s = preg_replace('~\\(?!n)~', '', $s);
echo $s; // => \n t
我们需要 4 个反斜杠将 2 个文字反斜杠传递给正则表达式引擎以匹配输入字符串中的 1 个文字反斜杠。 (?!n)
是一个 负先行 ,它使反斜杠的所有匹配都失败,反斜杠紧随其后 n
.