我正在寻找有关 PHP 正则表达式的帮助。
我正在为仅限邀请的博客创建一个输入页面,所以我不需要担心垃圾邮件发送者。我想让人们添加 URL 变得简单,但我也想让他们能够使用 HTML 标记,如果这让他们高兴的话。
在下面的示例中,$text 变量包含三个链接。我想<a > ... </a>
围绕前两个创建标签,但第三个已经有这些标签,所以我想不管它。我的正则表达式适用于最后两种情况,但不是第一种。
我的正则表达式开头[^<a href *?= *?\'\"]
我想说“如果字符串以<a href='>
(或类似)开头,则不要创建匹配项,但这不是它在实践中的工作方式。在这里,^
行为作为“行首”字符而不是作为否定者。
我希望输出看起来像这样:
Visit <a ...>http://www.example.com/</a> for more info.
<a ...>http://www.example.com/index.php?q=regex</a>
Here is a <i><a ...>link</a> to visit</i>.
提前感谢您对重写正则表达式的任何帮助。
詹姆士
<?php
$text = "Visit http://www.example.com/ for more info.
http://www.example.com/index.php?q=regex
Here is a <i><a href='http://www.google.ca/search?q=%22php+regex%22&hl=en'>link</a> to visit</i>.";
// Ignore fully qualified links but detect bare URLs...
$pattern = '/[^<a href *?= *?\'\"](ftp|https?):\/\/[\da-z\.-]+\.[a-z\.]{2,6}[\/\.\?\w\d&%=+-]*\/?/i';
// ... and replace them with links to themselves
$replacement = "<a href='$0'>$0</a>";
$output = preg_replace($pattern, $replacement, $text);
// Change line breaks to <p>...</p>...
$output = str_replace("\n", "", $output);
$output = "<p>".str_replace("\r", "</p><p>", $output)."</p>";
// Allow blank lines
$output = str_replace("<p></p>", "<p> </p>", $output);
// Split the paragraphs logically in the HTML
$output = str_replace("</p><p>", "</p>\r<p>", $output);
echo $output;
?>