讨厌的正则表达式和奇怪的字符串行为

时间:2013-11-16 18:30:30

标签: php regex

我一直在努力解决这个问题很长一段时间,我似乎无法找到解决方案。我有以下正则表达式用于匹配URL,这些表达似乎完美无缺,直到我在新行上发布一堆链接,它们之间没有空格。

(http|ftp)+(s)?:(\/\/)((\w|\.|\-)+)(\/)?(\S)+

我在几个正则表达式测试中尝试了这个,它似乎正确选择了URL,与我的应用程序中的代码不同。这让我觉得代码肯定有问题,我开始调试了。我在echo编辑我正在应用正则表达式的字符串时发现的是:

http://www.google.com/\r\nhttp://www.google.com/\r\nhttp://www.google.com/

我从未在浏览器中看到新行\r\n显示为文本。这让我觉得还有其他东西可以在这个字符串上得到它。我遵循了我的逻辑,结果是这个字符串从textarea元素直接进入$_POST并且没有在任何地方被操纵。

可能导致这些\r\n以文字形式显示的内容以及如何匹配用户可能以新线分隔的网址?

我真的非常绝望,我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

如果你看到了

http://www.google.com/\r\nhttp://www.google.com/\r\nhttp://www.google.com/

当你回显字符串时,这意味着你回复的实际字符串是:

http://www.google.com/\\r\\nhttp://www.google.com/\\r\\nhttp://www.google.com/

即。反斜杠已被转义,导致它们不被视为换行符。这意味着您只在正则表达式中获得一个匹配。

请查看此问题:Why are $_POST variables getting escaped in PHP?,了解您的请求可能会被转义的原因。