我不是很擅长正则表达式,但我需要从这个
转换下面的例子<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>
答案 0 :(得分: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。
答案 1 :(得分:2)
如果您只是在<li>
元素中查找格式与问题中的网址相同的网址,那么它应该比许多其他建议的解决方案简单得多。您不需要验证您的网址,我认为您只需要获取网站名称和网址列表,然后将网址转换为链接。
您的搜索模式可能是:
<li>(.+) - (https?:\/\/)?(\S+?)<\/li>
替换模式将是:
<li>$1 - <a href="(?2:$2:http\://)$3" rel="external">$3</a></li>
刚刚在TextMate中测试了find / replace out,它运行得很好。如果它不存在,它会加http://
,否则假设-
之后的任何内容都是URL,只要它不包含空格。
为了测试正则表达式,Rubular是一个很棒的工具。您可以粘贴一些文本,它会在您输入正则表达式时显示匹配的内容。它是一个ruby工具,但TextMate使用与ruby相同的正则表达式语法。
答案 2 :(得分:1)
您必须非常清楚需要多少信息才能使正则表达式避免误报。
例如,模式www.something.somethingelse足够吗?文件中还有其他www会被抓住吗?
也许&lt; li&gt;东西 - somethingelse&lt; / li&gt;是正确的匹配。如果不知道你的整个档案,我们无法猜测。可能还有其他&lt; li&gt;在那里,你不想改变。
答案 3 :(得分:-2)
www\.[a-zA-Z0-9_-]+\.(fr|com|org|be|biz|info|getthelistsomewhere)