使用PHP';替换多次出现的正确语法;s preg_替换
我已经用类似的想法讨论了stack overflow中的其他问题,但没有一个问题与我试图做的事情非常相似 看起来很简单,但我陷入了困境。 我试图用一个换行符来替换多次出现的换行符(使用PHP';替换多次出现的正确语法;s preg_替换,php,regex,preg-replace,Php,Regex,Preg Replace,我已经用类似的想法讨论了stack overflow中的其他问题,但没有一个问题与我试图做的事情非常相似 看起来很简单,但我陷入了困境。 我试图用一个换行符来替换多次出现的换行符(\n),这样人们就不能一次提交多个换行符。 这是我试过的 $text = "Foo\n\n\nbar!\n\nfoobar!"; $text = preg_replace("#\n+#", "\n", $text); echo $text; 预期返回的语句为: Foo\nbar!\nfoobar! 但是没有雪茄!
\n
),这样人们就不能一次提交多个换行符。
这是我试过的
$text = "Foo\n\n\nbar!\n\nfoobar!";
$text = preg_replace("#\n+#", "\n", $text);
echo $text;
预期返回的语句为:
Foo\nbar!\nfoobar!
但是没有雪茄!
我试了好几次,但似乎都不管用
我做错了什么
谢谢 您可能还需要检查所有三种换行符:
$text = "Foo\n\r\n\n\rbar!\n\nfoobar!";
$text = preg_replace('#(\r\n|\r|\n)+#m', "\n", $text);
echo $text;
您可能还希望检查所有三种换行符:
$text = "Foo\n\r\n\n\rbar!\n\nfoobar!";
$text = preg_replace('#(\r\n|\r|\n)+#m', "\n", $text);
echo $text;
如果您只对解决方案感兴趣,请跳到最后一行 以下是最终发生的事情。我在html中有一个
div
标记,其中包含某些信息。
当用户点击按钮时,一个JS代码运行,将div
转换为输入
文本框,并将该文本框的值设置为原始div的html,同时用\n
替换所有出现的
,以创建真正的换行符。
然后表单通过ajax提交到服务器
当我尝试在PHP中替换换行符时,上述建议都没有起到作用,原因很简单,它不是一个“真正的”换行符。提交到服务器的是文本\n
。
您可能认为,按照ghostdog74的建议,在\n
中转义反斜杠可以解决问题,但事实并非如此。我尝试了几种不同的方法来逃避,但似乎没有任何帮助
最后我参考了一些旧的正则表达式材料,发现:
许多风格还支持\Q…\E转义序列。\Q和\E之间的所有字符都被解释为文字字符。例如.\Q*\d+*\E与文本\d+匹配。可以在正则表达式结尾省略\E。。。JGsoft引擎、Perl、PCRE
下面是解决我问题的一段代码:
$text = preg_replace('#[\Q\n\E]+#', "\n", $text);
谢谢大家的帮助+1表示所有:)如果您只对解决方案感兴趣,请跳到最后一行 以下是最终发生的事情。我在html中有一个
div
标记,其中包含某些信息。
当用户点击按钮时,一个JS代码运行,将div
转换为输入
文本框,并将该文本框的值设置为原始div的html,同时用\n
替换所有出现的
,以创建真正的换行符。
然后表单通过ajax提交到服务器
当我尝试在PHP中替换换行符时,上述建议都没有起到作用,原因很简单,它不是一个“真正的”换行符。提交到服务器的是文本\n
。
您可能认为,按照ghostdog74的建议,在\n
中转义反斜杠可以解决问题,但事实并非如此。我尝试了几种不同的方法来逃避,但似乎没有任何帮助
最后我参考了一些旧的正则表达式材料,发现:
许多风格还支持\Q…\E转义序列。\Q和\E之间的所有字符都被解释为文字字符。例如.\Q*\d+*\E与文本\d+匹配。可以在正则表达式结尾省略\E。。。JGsoft引擎、Perl、PCRE
下面是解决我问题的一段代码:
$text = preg_replace('#[\Q\n\E]+#', "\n", $text);
谢谢大家的帮助+共1人:)那么打印什么
preg#u replace(“#\n+#”、“\n”、$text)
确实产生了Foo\nbar\恩福巴代码>(当然是换行符,而不是文字`和n`)。好的,你已经说过了。但再一次:什么会被打印出来?你有没有试着在标签中重复它,只是为了确保什么会被真正打印出来?什么会被打印出来preg#u replace(“#\n+#”、“\n”、$text)
确实产生了Foo\nbar\恩福巴代码>(当然是换行符,而不是文字`和n`)。好的,你已经说过了。但再一次:什么会被打印出来?你有没有试着在标签中重复它,只是为了确保什么会被真正打印出来?还是没有雪茄。。。我密切关注你使用的单引号和“m”,但似乎没有work@Bart:是的,单引号也不重要,但两者都不重要。我帖子的重点是支持Windows/UNIX/Mac断线。仍然没有雪茄烟。。。我密切关注你使用的单引号和“m”,但似乎没有work@Bart:是的,单引号也不重要,但两者都不重要。我的帖子的重点是支持Windows/UNIX/Mac断线。我也试过了,但似乎不起作用。我应该提到我是从一个文本区域获取数据的。我的输入可能不包含\n但包含不同的字符,我想,但我尝试了回显它,而且它看起来肯定不是这样。我也尝试过,似乎不起作用。我应该提到我是从一个文本区域获取数据的。我想我的输入可能不包含\n但包含不同的字符,但我尝试了回显它,而且它肯定不会以这种方式替换输入中的任何反斜杠和“n”字母,因为所有内容都在字符类中-这些应该是正常的,而不是方括号。此外,在这种情况下,使用单引号和三重转义(pattern='#(\\\n)+#
)也可以正常工作,但它确实很难看。这将替换输入中的任何反斜杠和“n”字母,因为所有内容都在一个字符类中-这些应该是正常的,而不是方括号。此外,在这种情况下,使用单引号和三重转义(pattern='.\\\n)+.'.
)也可以正常工作,但是