0

我不太擅长正则表达式,但我需要从这个转换下面的例子

<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>
4

4 回答 4

2

这在 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。

于 2009-10-13T20:32:19.600 回答
2

如果您只是<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​​ 相同的正则表达式语法。

于 2009-10-13T21:09:11.573 回答
1

您必须非常清楚需要向正则表达式提供多少信息以避免误报。

例如,模式 www.something.somethingelse 是否足够?文件中是否还有其他 www 会被捕获?

也许 <li> something - somethingelse</li> 是正确的匹配。如果不知道您的整个文件,我们无法猜测。那里可能还有其他您不想更改的 <li> 。

于 2009-10-13T21:04:37.367 回答
-2
www\.[a-zA-Z0-9_-]+\.(fr|com|org|be|biz|info|getthelistsomewhere)
于 2009-10-13T20:32:38.730 回答