在邮件系统上,当在一定数量的字符之后发布邮件时,会自动添加换行符(愚蠢的做事方式但不幸的是不允许更改)。这意味着中断已自动插入到URL中,因此可以拆分长的中断,例如:
http://www.stackoverflow.com/some-more-<br/>stuff
检索邮件时,函数会将链接转换为标记,此URL的结果为:
<a href='http//www.stackoverflow.com/some-more-'>http://www.stackoverflow.com/some-more-</a>stuff
我需要在<br/>
转换为链接之前删除它。
我已经将消息拆分为空格中的单词,然后遍历每个单词,看它是否包含“http://”或“www”。然后用空字符串替换<br/>
。
但是,这仅适用于在段落中输入的URL,例如:
对于使用换行符输入的网址不起作用,例如:
以下是网址:
这里还有一些文字
..被切入:
这是URL:http://www.stackoverflow.com这里还有一些文字
..因为在这个'单词'中删除了所有换行符(因为我在空格上分裂,所有这些都被视为一个单词)。
我认为我可以拆分换行符,但是这对于在第一个示例中输入的段落中的URL不起作用,并且它也会在包含中断的任何URL的中间拆分。
显然,我需要以某种方式找到网址并替换其中的换行符,但我遇到了这个问题,因为我似乎无法做到这一点!
如果我遗漏任何细节,请随时提出,我会马上回来。谢谢:))
PS - 这是用C#编码的。
答案 0 :(得分:1)
请删除其他答案。
我无法解决你的问题。不,我想我做了。
您可以使用此正则表达式查找所有网址,不管它们是否在多行中被破坏:
(?<url>https?://(.|\r\n)*?(=? ))
这将返回名为“url”的捕获组,其中包含您的网址,其中包含或不包含换行符。你可以使用(。| \ r \ n)*来获得它,它允许通过\ r \ n(cr,lf)查找多行中断的URL。检查这是否是邮件的行尾编码。如果没有,你可以用(。| \ n)或者你的情况更改地址。
您找到了自己的网址,可以删除其中的\ r \ n。
您可以使用此正则表达式进行改进:
(?<url>https?://(.|(?<deleteMe>\r\n))*?(=? ))
deleteMe
组会捕获网址内的所有违规换行符,因此您可以安全地将其全部删除。
重要提示:您必须使用多行选项运行正则表达式如果不是,则无效。
示例文字:
The firs url is http://www.casa.com/aqui.htm and the second is http://www.the
house.com/broken url
匹配
url: http://www.casa.com/aqui.htm
url: http://www.the\r\nhouse.com/broken
删除我的组匹配粗体\ r \ n