Php 只有在不后跟n的情况下,如何替换所有出现的\项?

Php 只有在不后跟n的情况下,如何替换所有出现的\项?,php,regex,preg-replace,Php,Regex,Preg Replace,这似乎是一个相对简单的任务,让我陷入了一个PHP应用程序中。我有一个字符串,其中有一束\n。这些都很好,需要留在那里。但是,字符\也有一次出现,我需要替换或删除这些字符,比如说,使用空字符,而不删除后跟n的字符 我想到的最好方法是首先用其他东西替换所有\n,一些奇怪的字符,然后用空白替换剩余的\n,然后将奇怪的字符转换回\n。然而,这似乎是在浪费时间和资源,此外,没有任何东西可以保证我会找到足够奇怪的字符,而这些字符在字符串的其余部分中永远不会遇到 有什么提示吗?您应该能够通过一个否定的前瞻断言

这似乎是一个相对简单的任务,让我陷入了一个PHP应用程序中。我有一个字符串,其中有一束\n。这些都很好,需要留在那里。但是,字符\也有一次出现,我需要替换或删除这些字符,比如说,使用空字符,而不删除后跟n的字符

我想到的最好方法是首先用其他东西替换所有\n,一些奇怪的字符,然后用空白替换剩余的\n,然后将奇怪的字符转换回\n。然而,这似乎是在浪费时间和资源,此外,没有任何东西可以保证我会找到足够奇怪的字符,而这些字符在字符串的其余部分中永远不会遇到


有什么提示吗?

您应该能够通过一个否定的前瞻断言来实现这一点:

\\(?!n)
\\s查找反斜杠,The?!n断言下一个字符不是n,但与该字符不匹配

要在PHP中使用此选项,请执行以下操作:

$text = 'foo\nbar\nb\az\n';
$newtext = preg_replace('/\\\\(?!n)/', '', $text);

此处的详细信息:

您应该能够使用否定的前瞻性断言来完成此操作:

\\(?!n)
\\s查找反斜杠,The?!n断言下一个字符不是n,但与该字符不匹配

要在PHP中使用此选项,请执行以下操作:

$text = 'foo\nbar\nb\az\n';
$newtext = preg_replace('/\\\\(?!n)/', '', $text);
此处的详细信息:

您需要

$s = preg_replace('~\\\\(?!n)~', '', $s);
见:

我们需要4个反斜杠将2个文本反斜杠传递给正则表达式引擎,以匹配输入字符串中的1个文本反斜杠。这个n是一个负前瞻,它会使紧跟在n之后的反斜杠的所有匹配失败。

您需要

$s = preg_replace('~\\\\(?!n)~', '', $s);
见:


我们需要4个反斜杠将2个文本反斜杠传递给正则表达式引擎,以匹配输入字符串中的1个文本反斜杠。这个n是一个负前瞻,它会使紧跟在n后面的反斜杠的所有匹配失败。

您尝试过什么正则表达式?可能是preg\u替换'~\\\\?!n~,$s?为什么需要正则表达式?您有\n或\\n吗?\n中的\不是真实的\。检查这个:使用四次而不是两次,这是因为任何处理字符串的实例都可能从中删除一个backshlash。您是否尝试过从字段为“%\%”的表中获取RWO,尝试一下,您就会得到它@mmvsbg:我贴出了答案,然后附上了必要的解释和代码演示。你试过什么正则表达式?也许用preg\u替换“~\\\?!n~,$s?为什么需要正则表达式?您有\n或\\n吗?\n中的\不是真实的\。检查这个:使用四次而不是两次,这是因为任何处理字符串的实例都可能从中删除一个backshlash。您是否尝试过从字段为“%\%”的表中获取RWO,尝试一下,您就会得到它@mmvsbg:我发布了答案,然后附上了必要的解释和代码演示。另外,请参阅:要指定文字单引号,请使用反斜杠\-以单引号和双引号字符串文字表示。另外,请参阅:若要指定文字单引号,请使用反斜杠\-对其进行转义在单引号和双引号字符串文本中。对于负前瞻断言,此正则表达式似乎比其他答案+1简单得多。对于负前瞻断言,此正则表达式似乎比其他答案+1简单得多