正则表达式捕获所有出现但最后的某些字符

时间:2014-07-16 22:11:54

标签: regex

当我的客户输入带有网址的句子时,我想从我的网址正则表达式检测器中排除常见的标点符号。一个常见的情况是网址example.com?q=this(显然需要包含?)与一句话

  

您如何看待example.com?

这个表达很适合我的需要:

(?:https?\:\/\/)?(?:\w+\.)+\w{2,}(?:[?#/]\S*)?

然而,它包括最后的所有标点符号,所以我在每个匹配项中进行迭代,以查找并使用此捕获的组来排除所述标点符号:

(.*?)[?,!.;:]+$

但是,在扫描可能包含多个URL的整个文本块时,我不确定如何利用“字符串结束”技术。希望有一种方法可以在没有额外工作的情况下从一开始就捕获正确的区块。

1 个答案:

答案 0 :(得分:0)

在标点符号后面只需要非空格而不是使其成为可选项。

(?:https?\:\/\/)?(?:\w+\.)+\w{2,}(?:[?#\/]\S+)?

您当然会丢失有效的URL结尾,例如example.com/将成为example.com但据我所知,没有区别。