我不太擅长正则表达式,但我需要从这个转换下面的例子
<li>Creations by Carol - www.driedfloralcreations.com</li>
到
<li>Creations by Carol - <a href="http://www.driedfloralcreations.com" rel="external">www.driedfloralcreations.com</a></li>
这在 PHP 中怎么样?
$string = '<li>Creations by Carol - www.driedfloralcreations.com</li>';
$pattern = '/(www\.[a-z\d-\.]+\.[a-z]+)/i';
$replacement = '<a href="http://$1" rel="external">$1</a>';
echo preg_replace($pattern, $replacement, $string);
假设您的链接始终是 www.something.extension。
如果您只是<li>
在与问题中的格式类似的元素中查找 URL,那么它应该比许多其他建议的解决方案简单得多。我假设您实际上并不需要验证您的 URL,您只需获取站点名称和 URL 列表并将 URL 转换为链接。
您的搜索模式可能是:
<li>(.+) - (https?:\/\/)?(\S+?)<\/li>
替换模式将是:
<li>$1 - <a href="(?2:$2:http\://)$3" rel="external">$3</a></li>
刚刚在 TextMate 中测试了查找/替换,效果很好。如果它http://
不存在,它会添加,否则假设后面的任何内容都是-
URL,只要它不包含空格。
对于测试正则表达式,Rubular是一个很棒的工具。您可以粘贴一些文本,它会在您键入正则表达式时显示匹配的内容。它是一个 ruby 工具,但 TextMate 使用与 ruby 相同的正则表达式语法。
您必须非常清楚需要向正则表达式提供多少信息以避免误报。
例如,模式 www.something.somethingelse 是否足够?文件中是否还有其他 www 会被捕获?
也许 <li> something - somethingelse</li> 是正确的匹配。如果不知道您的整个文件,我们无法猜测。那里可能还有其他您不想更改的 <li> 。
www\.[a-zA-Z0-9_-]+\.(fr|com|org|be|biz|info|getthelistsomewhere)